Configuração persistente da política de reinicialização

Olá,

Estou usando o repositório discourse_docker com o script launcher para executar uma instância interna do Discourse. Gostaria de alterar persistentemente a política de reinicialização de always para unless-stopped para poder manter os contêineres Docker parados ao fazer atualizações/reinicializações do sistema operacional.

Posso ver que a política de reinicialização é uma variável no script do launcher, mas qual a melhor forma de manter essa configuração quando um novo contêiner é construído? Deve funcionar tanto via “launcher rebuild” quanto usando o docker_manager via /admin/upgrade.

Agradeço desde já,
Saudações
.sascha

1 curtida

Não me lembro de mais ninguém ter perguntado isso, e não vejo uma maneira óbvia. Acho que sua melhor aposta é fazer um

  ./launcher destroy app

se você quiser que ele permaneça parado e iniciá-lo novamente com

  ./launcher start app

Isso destruirá o contêiner, portanto, quaisquer alterações que você tenha feito dentro dele (como atualizações do docker_manager) serão destruídas.

Ah, mas aqui está isto:

resumo: faça um docker update --restart=unless-stopped app após cada reconstrução.

2 curtidas

Sim, eu sei disso :wink: A atualização do Docker é o que estou fazendo no momento. Mas tenho medo de esquecê-la em algumas das próximas reconstruções. Daí a pergunta de como torná-la persistente.
Outra opção seria apenas editar o script do lançador e torcer para não haver muitos conflitos de rebase ao fazer o pull :wink:

A única vez que tive problemas com reinicializações após um boot foi se eu mudei de app.yml para web_only.yml e esqueci de destruir o container app. Eu faço upgrades e reinicializações do docker regularmente sem nenhum problema com os autostarts. FWIW, eu não vi ninguém mais preocupado com isso nos últimos 5 anos. A menos que você tenha algo em jogo que eu não saiba, talvez não se preocupe com isso?

Bem, hoje o problema foi que eu queria fazer uma instalação limpa, pois tinha uma versão estranha 2.4.0-betaXYZ que não atualizava sozinha. Fiz um teste em outra VM com uma instalação limpa e restaurei o backup para 2.7.12, o que funcionou perfeitamente (também dividi o contêiner de dados em redis e postgres).

Agora, o servidor principal ainda estava executando um Ubuntu antigo e um Docker antigo, então eu queria:

  1. fazer um backup
  2. desligar o Discourse
  3. fazer as artimanhas de atualização do SO sem me preocupar com o Discourse, incluindo várias reinicializações
  4. Fazer uma instalação limpa
  5. Restaurar o backup

Eu só queria manter os contêineres desligados e não excluí-los imediatamente, pois não tinha mais certeza se precisava de algo deles que poderia ter esquecido durante meu teste. E eu pensei, ei, unless-stopped é para mim a política de reinicialização perfeita, pois garante que os contêineres iniciem automaticamente após a reinicialização, a menos que você os pare manualmente. Geralmente é exatamente o que eu quero, então pensei por que não tentar tornar isso permanente.

Não é um grande problema se não for possível. :slight_smile: Apenas farei a atualização do docker (ou se eu continuar esquecendo com muita frequência, farei a atualização do docker via cron a cada 5 minutos :wink: )