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
docker restart
com Docker ComposeO 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:
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:
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:
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.
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.
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 comandodocker 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 odb
.Reiniciar apenas o serviço
web
:Isso reinicia somente o serviço
web
, enquanto o serviçodb
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