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

Atachar terminal no container ubuntu docker

Olá,

Alguém poderia me explicar porque quando eu tento atachar meu terminal no container ubuntu só funciona quando faço com uma das imagens?

Obrigado.

Segue output do terminal:

 imacellone@localhost  ~  sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    
e53274b87ec2        ubuntu              "/bin/bash"         17 minutes ago      Exited (0) 3 minutes ago  
4a04ee27c2eb        ubuntu              "/bin/bash"         30 minutes ago      Exited (0) 54 seconds ago

 imacellone@localhost  ~  sudo docker start -ai 4a04ee27c2eb
 imacellone@localhost  ~  sudo docker ps -a  
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    
e53274b87ec2        ubuntu              "/bin/bash"         17 minutes ago      Exited (0) 4 minutes ago  
4a04ee27c2eb        ubuntu              "/bin/bash"         30 minutes ago      Exited (0) 2 seconds ago  
 imacellone@localhost  ~  sudo docker start -ai 4a04ee27c2eb
 imacellone@localhost  ~  sudo docker start -ai e53274b87ec2
root@e53274b87ec2:/# 
root@e53274b87ec2:/# 
root@e53274b87ec2:/# exit
 imacellone@localhost  ~ 
5 respostas

Alguém?

Opa Ítalo, tudo bem?

Quando o principal processo do Container não está em execução, o container morre ... Para exercitar esse conceito, faz um teste:

docker run -it ubuntu /bin/bash

Você entra na linha de comando desse container, agora pressiona CTRL pq (de modo sequencial) Você volta para seu bash colocando a execução desse container em background ...

Agora repete o comando seguido do mesmo processo (CTRL pq após entrar no container) :

docker run -it ubuntu /bin/bash

Quando retornar nessa segunda vez para seu bash, digita

docker ps

Os dois containers devem estar em execução, pois o processo bash permanece sendo executado ...

para acessar qualquer um deles

docker attach ContainerID

Se você pressionar CTRL d ... o processo bash desse container morre e o mesmo deixa de estar em execução.

Faz um teste desses conceitos ... o processo do container é acessível pela análise de processo do DockerHost

Um abraço.

Olá José Thiago, obrigado pela resposta.

O engraçado é que só não funcionou algumas vezes. Por exemplo, o container ubuntu abaixo foi criado e parado ontem e mesmo assim consegui startá-lo e atachar o meu terminal a ele, veja:

 imacellone@localhost  ~  docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
 imacellone@localhost  ~  docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
44c8a816f742        ubuntu              "/bin/bash"         7 hours ago         Exited (0) 7 hours ago                       pensive_ramanujan
 imacellone@localhost  ~  docker start -ai 44
root@44c8a816f742:/#

Eu queria entender o porque disso.

Ainda não testei a forma que você me enviou. Vou testar e posto aqui o resultado. Obrigado

Creio que descobri, só não sei se é coincidência. Quando crio um container ubuntu sem o -it, se eu tentar startá-lo novamente atachando meu terminal, não funciona. Se eu tentar criar um container com -it, quando eu sair dele, se eu tentar startá-lo novamente com start -ai, daí sim funciona.

Segue output:

 imacellone@localhost  ~  docker run ubuntu
 imacellone@localhost  ~  
 imacellone@localhost  ~  docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
 imacellone@localhost  ~  
 imacellone@localhost  ~  docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
945890b6d128        ubuntu              "/bin/bash"         6 seconds ago       Exited (0) 5 seconds ago                       hungry_wilson
 imacellone@localhost  ~  docker start -ai 94
 imacellone@localhost  ~   
 imacellone@localhost  ~        
 imacellone@localhost  ~  docker run -it ubuntu
root@766ecc658cce:/# 
root@766ecc658cce:/# 
root@766ecc658cce:/# 
root@766ecc658cce:/# exit
 imacellone@localhost  ~  docker ps -a         
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
766ecc658cce        ubuntu              "/bin/bash"         8 seconds ago       Exited (0) 3 seconds ago                        brave_visvesvaraya
945890b6d128        ubuntu              "/bin/bash"         46 seconds ago      Exited (0) 30 seconds ago                       hungry_wilson
 imacellone@localhost  ~  docker start -ai 766
root@766ecc658cce:/# 
root@766ecc658cce:/# 
root@766ecc658cce:/# 
root@766ecc658cce:/# exit
 imacellone@localhost  ~ 
solução!

Olá Ítalo

Não é coincidência, quando você não especificou com a flag de iteração com terminal o container não entrou em execução uma vez que foi passado somente a imagem e nenhuma ação, já quando é declarado a flag, a imagem ubuntu levanta o processo /bin/bash/ e assim o container fica em execução.

Duas dicas para você se aprofundar e ir testando novas possibilidades com Docker é uma série só sobre o assunto no Youtube do canal LinuxTips https://www.youtube.com/channel/UCJnKVGmXRXrH49Tvrx5X0Sw e um ambiente de testes https://labs.play-with-docker.com/

Espero ter ajudado, um abraço.

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