Políticas de reinicialização Usando o sinalizador --restart na execução do Docker, você pode especificar uma política de reinicialização sobre como um contêiner deve ou não ser reiniciado na saída.
não - Não reinicie o contêiner quando ele sair.
em falha - Reinicie o contêiner apenas se ele sair com um status de saída diferente de zero.
always - sempre reinicie o contêiner, independentemente do status de saída.
Você também pode especificar a quantidade máxima de vezes que o Docker tentará reiniciar o contêiner ao usar a política de falha. O padrão é que o Docker tentará para sempre reiniciar o contêiner.
$ sudo docker run --restart=always redis
Isso executará o contêiner redis com uma política de reinicialização sempre para que, se o contêiner sair, o Docker o reinicie.
$ sudo docker run --restart=on-failure:10 redis
Isso executará o contêiner redis com uma política de reinicialização em caso de falha e uma contagem máxima de reinicialização de 10. Se o contêiner redis sair com um status de saída diferente de zero mais de 10 vezes seguidas, o Docker interromperá a tentativa de reiniciar o contêiner. O fornecimento de um limite máximo de reinicialização é válido apenas para a política de falha.
unless-stopped
foi adicionada. Ele age comoalways
mas Se o contêiner for parado e o sistema for reiniciado ou o daemon do docker for reiniciado, o contêiner não será reiniciado. Veja aqui para uma boa redação das 4 opções blog.codeship.com/…docker
daemon deve iniciar automaticamente para suportar isso.O Docker tem esta página que explica como fazer isso com o upstart e o systemd. Concordo que não parece a coisa certa para o Docker. A solução deles é executar
docker start
, o que pressupõe que você já criou seu contêiner. Eu pensaria que você fariadocker run --rm
no script inicial (tratando-o como um processo e contêiner novinho em folha de uma imagem) ou apenas deixaria o daemon do docker reiniciar os contêineres na inicialização (como será por padrão se você não fizer mais nada ) O Upstart tem a vantagem de permitir fácil início / parada de processos, mas você também obtém isso com o start / stop do docker!Acho estranho forçar o usuário a criar manualmente um contêiner (com todas as ligações corretas de porta / volume) antes que o script inicial funcione.
fonte
Por que não?
Eu uso supervisord para isso com grande sucesso.
Use o que você sabe, use o que funciona, use algo que você possa facilmente manter e entender.
fonte
--rm
?--rm
é relevante aqui.docker
é um substituto paralxc
ouopenvz
que possuilxc.start.auto = 1
evzctl set --onboot yes
. Além disso, o ESXi e outras soluções de virtualização possuem esse recurso incluído. Como Lawrence, também não acho que esse recurso de inicialização automática deva ser implementado de uma maneira específica da distribuição, porque um usuário do docker deve ser capaz de resolver o mesmo problema com o mesmo conhecimento em todas as plataformas.