janela de encaixe - como você desativa a reinicialização automática em um contêiner?

156

Posso ativar a reinicialização automática com --restart=always, mas depois que paro o contêiner, como desativo esse atributo?

Normalmente, eu executo um servidor da web e normalmente mapeio a porta 80:

docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash

Mas há momentos em que desejo executar uma versão mais recente da minha imagem, mas quero manter o contêiner antigo por perto. O problema é que, se houver vários contêineres --restart=always, apenas um deles (aleatório?) É iniciado porque todos estão disputando a porta 80 no host.

Brad Grissom
fonte

Respostas:

326

Você pode usar a --restart=unless-stoppedopção, como @Shibashis mencionado, ou atualizar a política de reinicialização (isso requer a janela de encaixe 1.11 ou mais recente);

Veja a documentação paradocker update e políticas de reinício Docker .

docker update --restart=no my-container

que atualiza a política de reinicialização de um contêiner existente ( my-container)

thaJeztah
fonte
69
Use docker update --restart=no $(docker ps -a -q)para atualizar todos os seus recipientes :-)
Mark Mooibroek
33

Você pode iniciar seu contêiner com --restart=unless-stopped.

Shibashis
fonte
22

Use o abaixo para desativar TODOS os contêineres de reinicialização automática (daemon).

docker update --restart=no $(docker ps -a -q)

Use o seguinte para desativar a reinicialização de um contêiner SINGLE.

docker update --restart=no the-container-you-want-to-disable-restart

Racional :

O Docker fornece políticas de reinicialização para controlar se seus contêineres são iniciados automaticamente quando eles saem ou quando o Docker é reiniciado. Isso geralmente é muito útil quando o Docker está executando um serviço importante.

Notas

Se você estiver usando o docker-compose, talvez seja útil saber disso.

restart no é a política de reinicialização padrão e não reinicia um contêiner em nenhuma circunstância. Quando sempre é especificado, o contêiner sempre reinicia. A política em caso de falha reinicia um contêiner se o código de saída indicar um erro em caso de falha.

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

restart: always
FlyingV
fonte
12

Se você tiver um enxame reiniciando os contêineres, o enxame reiniciará todos os contêineres que você parar ou confirmar, independentemente da opção de reinicialização. Isso é um recurso, não um bug.

Verifique se você não está executando um serviço que esqueceu:

docker service ls

Então, você pode parar o serviço

docker service rm <service id discovered with previous command>
nachbar
fonte
1
lsresulta em erroError response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
naXa 11/11/19