
Depois de reiniciar o serviço docker na caixa do Ubuntu, service docker restart
ele iniciou alguns dos contêineres que eu não esperava que iniciasse.
Por que é que? Qual arquivo de configuração/armazenamento/qualquer informação contida sobre quais imagens devem ser iniciadas?
Eu tenho muitas imagens (~50) ao listá-las com docker images
. Mas apenas 8 deles iniciam quando eu inicio o dockerd
. Por que? Como faço para mudar isso?
Obrigado.
Responder1
Para contêineres individuais, há uma política de reinicialização que você pode aplicar. Isso é definido docker run --restart=...
ao iniciar o contêiner ou em uma restart: ...
linha no arquivo yml de composição. Você pode alterar a política de reinicialização em um contêiner existente com:
$ docker update --restart=... ${container_name_or_id}
Para listar todos os contêineres e suas políticas de reinicialização, você pode executar isto no bash:
$ docker container ls -q | \
xargs docker container inspect --format \
'{{ .Name }}: {{.HostConfig.RestartPolicy.Name}}'
Opolíticas de reinicializaçãovocê pode usar são:
não Não reinicie automaticamente o contêiner quando ele sair. Este é o padrão.
em caso de falha[:max-retries] Reinicie somente se o contêiner sair com um status de saída diferente de zero. Opcionalmente, limite o número de tentativas de reinicialização das tentativas do daemon do Docker.
sempre Sempre reinicie o contêiner, independentemente do status de saída. Quando você especifica sempre, o daemon do Docker tentará reiniciar o contêiner indefinidamente. O contêiner também sempre iniciará na inicialização do daemon, independentemente do estado atual do contêiner.
a menos que seja parado Sempre reinicie o contêiner, independentemente do status de saída, mas não o inicie na inicialização do daemon se o contêiner já tiver sido colocado em um estado parado antes.
Uma política de reinicialização always
resultaria em uma reinicialização inesperada do contêiner após a reinicialização do daemon do docker, como você está vendo, mesmo se você tivesse interrompido intencionalmente o contêiner. Por esse motivo, normalmente crio contêineres independentes com uma unless-stopped
política de reinicialização.
Se você estiver usando o modo docker swarm, os serviços iniciarão automaticamente um novo contêiner sempre que o estado de destino não corresponder ao estado atual. Para um cluster de enxame de nó único frequentemente visto em laptops, isso significa que o contêiner será reiniciado quando você reiniciar o docker, mas também se você simplesmente parar ou excluir o contêiner em execução.
Parar e remover permanentemente um serviço:
$ docker service ls # to show the running services
$ docker service rm ${service_id_or_name}
Se um serviço estiver configurado com modo replicado e você simplesmente quiser interrompê-lo temporariamente sem excluir o serviço, poderá atualizar as réplicas de destino para 0:
$ docker service update --replicas=0 ${service_id_or_name}
E os serviços podem ser implantados como parte de uma pilha. Para remover a pilha inteira:
$ docker stack ls # to show the defined stacks
$ docker stack rm ${stack_id_or_name}
Responder2
Isso significa que alguns de seus contêineres têm RestartPolicy definido como sempre. Isso significa que o contêiner deve estar sempre ativo. Inspecione esses contêineres em questão, verificando especificamente o valor de RestartPolicy.
$ docker inspect container-name
Isso geralmente acontece quando um contêiner foi criado com um sinalizador --restart
sempre
Para desativar a inicialização automática do contêiner, use o comando:
$ docker update --restart=no container-name
Outra maneira de contornar isso é definir RestartPolicy como a menos que seja interrompido ao iniciar o contêiner. Você pode ler a documentação completa deatualização da janela de encaixe
Responder3
Analise a política de reinicialização do docker, como --restart always
. Suponho que alguns de seus contêineres estejam usando isso. Verifique o script de inicialização do serviço para docker. Você pode usar docker ps -a --no-trunc
para ver a lista completa.
Responder4
As imagens não iniciam automaticamente, mas os contêineres.
Em service docker restart
contêineres ondeparououiniciadocom --restart always
flag será reiniciado automaticamente na reinicialização. Verifique isso através de docker ps -a
.
Se você não deseja que um contêiner seja iniciado (mesmo que tenha --restart always
sinalizador), basta removê-lo docker rm container
ou docker-compose down
.