Docker Compose

O comando docker restart também pode ser usado em ambientes com o Docker Compose para reiniciar serviços de containers. No entanto, o funcionamento do reinício dos containers com Docker Compose tem algumas particularidades em comparação com o uso do Docker isoladamente. Vamos entender como isso funciona.

Visão Geral do Docker Compose

O Docker Compose é uma ferramenta que permite definir e executar múltiplos containers com base em um arquivo YAML (docker-compose.yml ou compose.yaml). Com ele, você pode configurar uma stack de serviços e gerenciá-los facilmente com comandos do Docker Compose.

Funcionamento do docker restart com Docker Compose

O comando docker restart pode ser usado tanto diretamente no nível dos containers, quanto no nível do Docker Compose. Aqui está o detalhamento de como ele funciona em ambos os casos:

1. Reiniciar Containers Individuais

Se você deseja reiniciar um container específico que faz parte de um serviço gerenciado pelo Docker Compose, pode usar o comando docker restart diretamente no nome do container. No entanto, é importante observar que o nome do container é gerado automaticamente pelo Docker Compose com base no nome do projeto e no serviço. Por exemplo:

docker restart <project_name>_<service_name>_1

Suponha que você tenha um projeto chamado meu-projeto e um serviço definido como web no compose.yaml. O nome completo do container seria algo como meu-projeto_web_1. Assim, para reiniciar o container desse serviço específico, você poderia executar:

docker restart meu-projeto_web_1

Esse comando reinicia apenas o container específico, sem interferir nos outros containers do projeto.

2. Reiniciar Todos os Serviços com Docker Compose

Se você deseja reiniciar todos os serviços definidos no compose.yaml, pode usar o comando docker-compose restart (ou docker compose restart, na versão mais recente do Compose). Isso reinicia todos os containers definidos no arquivo de composição, respeitando as dependências de serviço, mas sem recriar os containers.

Exemplo:

Ou, se estiver usando o antigo docker-compose:

Esse comando é especialmente útil para reiniciar toda a stack de containers sem precisar derrubá-los e recriá-los. Ele simplesmente para e reinicia cada container, mantendo a configuração original e quaisquer volumes persistentes.

3. Reiniciar Serviços Específicos com Docker Compose

Você também pode reiniciar serviços específicos em vez de todos os containers do projeto. Para isso, basta especificar o nome do serviço:

Por exemplo, para reiniciar apenas o serviço web:

Esse comando para e reinicia o container responsável pelo serviço web sem afetar os outros serviços.

4. Timeout para Reiniciar Containers

Ao usar o comando docker restart com containers ou serviços, você pode especificar um timeout (tempo de espera) para que o Docker aguarde que o container finalize suas atividades antes de forçar a parada. Por padrão, o Docker aguarda 10 segundos antes de enviar o sinal SIGKILL, mas você pode ajustar esse tempo com a flag -t (timeout).

Por exemplo, para dar ao serviço 20 segundos para encerrar:

Relação com as Políticas de Reinicialização

Se os serviços definidos no docker-compose.yml estão configurados com políticas de reinicialização, como restart: always, on-failure ou unless-stopped, o comando restart interage com essas políticas. Aqui estão alguns pontos importantes:

  1. restart: always:

    • O serviço será reiniciado automaticamente se falhar ou após uma reinicialização do Docker daemon. Usando docker compose restart, o container será interrompido e reiniciado normalmente, sem conflito com a política.

  2. restart: on-failure:

    • O container será reiniciado automaticamente apenas se falhar (exit code diferente de zero). O comando docker compose restart interrompe o container de forma controlada e, portanto, não o coloca em loop de reinicialização.

  3. restart: unless-stopped:

    • Semelhante ao always, mas se o container for manualmente parado, ele não será reiniciado após uma reinicialização do Docker daemon. O comando docker compose restart reinicia o container independentemente.

Exemplo Completo

Vamos ver um exemplo de como usar docker restart e docker compose restart em um projeto Docker Compose:

Exemplo de compose.yaml

Neste exemplo, temos dois serviços: web (Nginx) e db (PostgreSQL).

  • O serviço web está configurado para ser reiniciado sempre, independentemente do motivo da parada.

  • O serviço db será reiniciado apenas se falhar.

Comandos:

  • Reiniciar todos os serviços:

    Isso reinicia tanto o serviço web quanto o db.

  • Reiniciar apenas o serviço web:

    Isso reinicia somente o serviço web, enquanto o serviço db continua em execução.

  • Reiniciar com timeout de 20 segundos:

    O Docker aguarda até 20 segundos antes de forçar o encerramento do container web.

Conclusão

O comando docker restart e sua versão com Docker Compose permitem reiniciar containers de maneira controlada, seja no nível de serviços individuais ou de toda a stack. Ao usar docker compose restart, você pode parar e reiniciar containers sem recriá-los, mantendo as definições e estados originais. Essa funcionalidade é extremamente útil para atualizar ou reiniciar serviços sem afetar todo o ambiente.

Laboratório

Criar o arquivo compose.yaml:

Last updated