Como reiniciar um contêiner docker parado


91

Eu lanço um contêiner docker a partir de uma imagem com o seguinte comando:

$ docker run -d myimage /bin/bash -c "mycommand"

Ao "mycommand"terminar, o contêiner é parado (suponho que esteja parado), mas não é excluído, porque posso ver com este comando:

$ docker ps -a

Existe alguma forma de restarteste container com os mesmos parâmetros e manter os dados gerados por mycommand?


O "volume" ou "montagem de um diretório de host" está satisfazendo você? Como o documento mencionado: docs.docker.com/engine/tutorials/dockervolumes
Haoming Zhang

Respostas:


124

Sim, quando o comando inicial termina sua execução, o contêiner para.

Você pode iniciar um contêiner interrompido usando:

docker start container_name

Se você quiser ver a saída do seu comando, deve adicionar -aiopções:

docker start -ai container_name

PS. há um docker restart container_namemas que é usado para reiniciar um contêiner em execução - acredito que não seja o seu caso.


1
Meu contêiner para imediatamente após o início, todas as vezes. Não tenho certeza de qual é o objetivo disso. O uso do comando -ai dá esta resposta: Não foi possível abrir o arquivo de requisitos: [Errno 2] Não existe esse arquivo ou diretório: 'requirements.txt'
geoidesic

@geoidesic poderia fornecer mais detalhes? De que tipo de arquivo 'requirements.txt' você está falando?
lmtx

1
@geoidesic, para solucionar isso, alterei o ponto de entrada para simplesmente executar o comando sleep 900, que me permitiu conectar ao contêiner e executar comandos dentro dele usando docker exec -it container_name bash. Quando executei o comando de dentro do contêiner, pude ver por que a implementação inicial do meu script estava falhando e corrigi-lo.
PatS de

@PatS, você pode compartilhar como combinou startcom sleep? Não consigo chegar a um ponto em que possa correrexec
3pitt

11

Primeiro, $ docker ps -amostra todos os contêineres (os que estão em execução e os parados), por isso é que você não está vendo seu contêiner parado listado.

Em segundo lugar, você pode iniciar facilmente um contêiner interrompido em execução:

$ docker start container_name

Depois que o contêiner for iniciado, você pode executar seu comando:

$ docker exec -it container_name bash -c "mycommand"

As coisas que você cria em seu contêiner permanecerão dentro dele enquanto existir. Se você quiser manter os dados, mesmo que o contêiner seja removido, você pode usar um volume .


1

Deveria ser

$ docker restart container_id # OR
$ docker restart container_name

a resposta aceita restarté para um contêiner já em execução
3pitt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.