Como usar o comando docker attach para interagir com containers em execução

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker container attach para interagir com containers em execução. Você iniciará containers em modo detached (desacoplado), anexará a eles para observar sua saída e se desanexará usando a sequência de teclas padrão.

Você também explorará a anexação a containers com TTY habilitado e aprenderá como substituir a sequência de teclas de desanexação padrão para maior flexibilidade ao interagir com seus containers Docker.

Iniciar um container detached executando um comando simples

Nesta etapa, você aprenderá como iniciar um container Docker em modo detached (desacoplado). Quando um container é executado em modo detached, ele é executado em segundo plano, e a CLI do Docker não se conecta aos fluxos de entrada, saída ou erro padrão do container. Isso é útil para executar serviços ou aplicações de longa duração.

Usaremos a imagem ubuntu para executar um comando simples que imprime uma mensagem e depois sai. Primeiro, vamos fazer o pull (baixar) da imagem ubuntu para garantir que ela esteja disponível localmente.

docker pull ubuntu

Agora, vamos executar um container em modo detached usando o comando docker run com a flag -d. Executaremos um comando echo simples que imprime "Hello from detached container!" e depois sai.

docker run -d ubuntu echo "Hello from detached container!"

Após executar o comando, o Docker imprimirá o ID do container. Isso indica que o container foi iniciado em modo detached. Você pode verificar se o container está em execução (ou concluiu sua tarefa) usando o comando docker ps -a, que mostra todos os containers, incluindo aqueles que já foram finalizados.

docker ps -a

Você deve ver uma entrada para o container que acabou de iniciar. A coluna STATUS mostrará se o container ainda está em execução ou já foi finalizado. Como nosso comando é muito curto, o container provavelmente já terá finalizado no momento em que você executar docker ps -a.

Anexar ao container em execução e observar sua saída

Na etapa anterior, iniciamos um container em modo detached. Embora o container tenha executado um comando simples e provavelmente tenha finalizado rapidamente, ainda podemos anexar a ele para ver sua saída. O comando docker attach permite que você se conecte aos fluxos de entrada, saída e erro padrão de um container em execução ou finalizado.

Primeiro, vamos obter o ID do container que iniciamos na etapa anterior. Você pode usar o comando docker ps -a e procurar o container que executa o comando echo. Copie o ID do container.

docker ps -a

Agora, use o comando docker attach seguido pelo ID do container para anexar ao container.

docker attach <container_id>

Substitua <container_id> pelo ID real do seu container. Como o container executou um comando echo simples e finalizou, você pode não ver nenhuma saída imediatamente, ou pode ver a saída "Hello from detached container!" se a saída ainda estiver em buffer. O comando attach irá conectá-lo aos fluxos do container. Como o container já concluiu sua tarefa, o comando attach provavelmente sairá imediatamente após a conexão.

Para demonstrar a anexação a um container que permanece em execução, vamos iniciar um novo container detached que executa um comando que o mantém ativo por alguns segundos. Usaremos a imagem ubuntu novamente e executaremos sleep 10.

docker run -d ubuntu sleep 10

Obtenha o ID deste novo container usando docker ps. Desta vez, o container deve estar no estado Up.

docker ps

Agora, anexe a este container em execução usando seu ID.

docker attach <new_container_id>

Substitua <new_container_id> pelo ID do container que executa sleep 10. Você estará anexado aos fluxos padrão do container. Como o comando sleep não produz saída, você não verá nada. O terminal parecerá estar esperando. O container será executado por 10 segundos e depois finalizará. Quando o container finalizar, o comando attach também finalizará, retornando você ao seu prompt de terminal.

Desanexar do container usando a sequência de teclas padrão

Na etapa anterior, você anexou a um container em execução. Quando você está anexado a um container, você está conectado aos seus fluxos de entrada, saída e erro padrão. Para desanexar do container sem pará-lo, você pode usar uma sequência de teclas especial. Por padrão, essa sequência é CTRL+p seguida por CTRL+q.

Vamos iniciar um novo container detached que será executado por um período mais longo para que você tenha tempo de praticar o desanexamento. Usaremos a imagem ubuntu e executaremos sleep 60.

docker run -d ubuntu sleep 60

Obtenha o ID deste novo container usando docker ps.

docker ps

Agora, anexe a este container em execução usando seu ID.

docker attach <container_id>

Substitua <container_id> pelo ID do container que executa sleep 60. Você agora está anexado ao container. Para desanexar do container e retornar ao seu prompt de terminal sem parar o container, pressione a seguinte sequência de teclas:

  1. Pressione e segure a tecla CTRL, depois pressione a tecla p. Solte ambas as teclas.
  2. Pressione e segure a tecla CTRL, depois pressione a tecla q. Solte ambas as teclas.

Após pressionar CTRL+p seguido por CTRL+q, você deve ser retornado ao seu prompt de terminal. O container continuará a ser executado em segundo plano. Você pode verificar se o container ainda está em execução usando docker ps.

docker ps

Você deve ver o container executando sleep 60 listado com um status de Up.

Iniciar outro container desanexado com TTY habilitado

Nesta etapa, iniciaremos outro container detached, mas desta vez ativaremos um pseudo-TTY (Terminal) para o container. Habilitar um TTY é frequentemente necessário quando você deseja interagir com o shell de um container ou executar comandos que esperam um terminal.

Usaremos o comando docker run com a flag -d para o modo detached e a flag -t para alocar um pseudo-TTY. Executaremos um comando simples que mantém o container em execução, como sleep 60.

docker run -d -t ubuntu sleep 60

A flag -t aloca um pseudo-TTY, que é um terminal virtual que permite que você interaja com o container como se estivesse conectado a um terminal físico. Mesmo que o container esteja sendo executado no modo detached (-d), ter um TTY ativado é importante para processos interativos ou quando você planeja anexar ao container mais tarde e precisa de um ambiente de terminal.

Após executar o comando, o Docker imprimirá novamente o ID do container, indicando que o container foi iniciado no modo detached com um TTY. Você pode verificar se o container está em execução usando docker ps.

docker ps

Você deve ver o novo container listado com um status de Up. Anote o ID do container, pois você precisará dele na próxima etapa para anexar a este container.

Anexar ao container com TTY habilitado e desanexar usando a sequência de teclas padrão

Na etapa anterior, iniciamos um container detached com um TTY ativado. Agora, anexaremos a este container e praticaremos o desanexamento usando a sequência de teclas padrão (CTRL+p seguida por CTRL+q). Anexar a um container com um TTY permite sessões interativas, mesmo que o comando inicial não exija uma.

Primeiro, obtenha o ID do container que você iniciou na etapa anterior que está executando sleep 60 com o TTY ativado.

docker ps

Encontre o ID do container para o container ubuntu executando sleep 60.

Agora, anexe a este container usando o comando docker attach seguido pelo ID do container.

docker attach <container_id>

Substitua <container_id> pelo ID real do seu container. Você agora está anexado aos fluxos padrão do container e, como um TTY está ativado, você tem uma interface semelhante a um terminal. Embora o comando sleep não exija interação, você está conectado ao terminal virtual do container.

Para desanexar do container sem pará-lo, use a sequência de teclas de desanexação padrão:

  1. Pressione e segure a tecla CTRL, depois pressione a tecla p. Solte ambas as teclas.
  2. Pressione e segure a tecla CTRL, depois pressione a tecla q. Solte ambas as teclas.

Você deve ser retornado ao seu prompt de terminal. O container continuará a ser executado em segundo plano até que o comando sleep 60 termine. Você pode verificar se o container ainda está em execução usando docker ps.

docker ps

Você deve ver o container executando sleep 60 listado com um status de Up.

Anexar a um container e substituir a sequência de teclas de desanexação

Nesta etapa final, você aprenderá como substituir a sequência de teclas de desanexação padrão ao anexar a um container. Isso pode ser útil se a sequência padrão entrar em conflito com outros aplicativos ou se você preferir uma combinação de teclas diferente.

Usaremos o comando docker attach com a flag --detach-keys para especificar uma sequência de teclas diferente. O formato para a flag --detach-keys é sequence, onde sequence é uma string separada por vírgulas de combinações de teclas. Por exemplo, ctrl-a,ctrl-d definiria a sequência de desanexação para CTRL+a seguido por CTRL+d.

Primeiro, vamos iniciar um novo container detached com TTY ativado que será executado por um tempo.

docker run -d -t ubuntu sleep 60

Obtenha o ID deste novo container usando docker ps.

docker ps

Agora, anexe a este container, mas desta vez, especifique uma sequência de teclas de desanexação diferente usando a flag --detach-keys. Vamos usar ctrl-a,d como a nova sequência. Isso significa que você pressionará CTRL+a seguido por d para desanexar.

docker attach --detach-keys="ctrl-a,d" <container_id>

Substitua <container_id> pelo ID real do seu container. Você agora está anexado ao container. Para desanexar usando a nova sequência:

  1. Pressione e segure a tecla CTRL, depois pressione a tecla a. Solte ambas as teclas.
  2. Pressione a tecla d.

Você deve ser retornado ao seu prompt de terminal. O container continuará a ser executado em segundo plano. Você pode verificar se o container ainda está em execução usando docker ps.

docker ps

Você deve ver o container executando sleep 60 listado com um status de Up.

Resumo

Neste laboratório, você aprendeu como iniciar um container Docker em modo detached usando o comando docker run -d, que permite que os containers sejam executados em segundo plano sem anexar ao terminal. Em seguida, você praticou o uso do comando docker attach para se conectar aos fluxos padrão de um container em execução ou finalizado para observar sua saída.

Além disso, você explorou como desanexar de um container anexado usando a sequência de teclas padrão (CTRL+p CTRL+q) e como o comportamento de docker attach muda quando o container é iniciado com TTY ativado (-t). Por fim, você aprendeu como substituir a sequência de teclas de desanexação padrão ao anexar a um container, proporcionando flexibilidade no gerenciamento de suas interações com o container.