Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

docker run x docker start

Se executo um container sem a opção -it (na verdade sem o "t" que aloca o terminal) como exemplo abaixo: docker run ubuntu

Ele executa e finaliza o container. Este container fica disponível ao verificarmos pelo comando: docker ps -a

Porém se eu tentar iniciar esse container novamente, passando ou não as opções "-ai" este container não permanece em execução:

Exemplo:

docker run ubuntu

Vamos supor que gravou com o hash a1b2c3

docker start a1b2c3

O container aparentemente é executado e finalizado, ou seja não se mantém em execução.

Se tento: docker start -ai a1b2c3

O container não entra em modo interativo, talvez por não ter sido criado com a opção -t inicialmente.

É isto mesmo que ocorre? Não há como atrelar um terminal em um container já existente?

Obrigado!

4 respostas

O docker só permitiria a conexão com o terminal dos containers que estão em execução, quando colocamos docker run o container é criado, mas não ficará em execução.

Ao criar o container você poderá deixá-lo rodando em modo "desatachado", dessa forma o processo continuará existindo e você conseguirá acessá-lo depois.

Uma sugestão, seria:

docker run -it -d ubuntu

Com isso o container será criado e o processo estará em execução. Depois você poderá utilizar o comando :

docker exec -it [nome container] bash

Para poder assim acessar o container e inserir os comandos.

Caso você já tenha criado o container e ele tenha parado, poderá inicializá-lo novamente com o comando:

docker start [nome container]

E depois para acessar o bash:

docker exec -it [nome do container] bash

Abs

solução!

Fala, Luiz.

Sim, é exatamente isso que ocorre. Não há como anexar um terminal à um container já existente em estado 'Exited'.

Esta possibilidade existe caso o container esteja em execução com o comando:

docker exec -it <nome_ou_id_do_container> bash

Complementando, caso você se encontre numa situação onde não é possível acessar um container, pode-se salvar o estado do mesmo e criar uma nova imagem a partir dele, a qual será utilizada para subir este container novamente com os parâmetros que você deseja.

Muito útil para investigar algo que pode ter dado errado na execução de um container. Você poderia simplesmente apagar o container e subir outro, porém seria sensato tentar entender porque seu container não está rodando corretamente. Neste caso:

docker commit <nome_ou_id_do_container> <nome_da_nova_imagem>

Após isso, suba um novo container com a nova imagem criada a partir de seu container 'problemático' para investigar o que poderia estar errado.

Agora que vi que o grande Rafael Silva já havia respondido.

Siga as recomendações dele e você será feliz.

Abs

@Rafael agradeço a resposta, mas ainda estava na duvida quanto ao parâmetro "-it". @David obrigado pela resposta realmente agora faz mais sentido.

Obrigado!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software