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?

Bob5421
fonte
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.

lmtx
fonte
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 .

lmiguelvargasf
fonte
1

Deveria ser

$ docker restart container_id # OR
$ docker restart container_name
Doan Vu
fonte
a resposta aceita restarté para um contêiner já em execução
3pitt