Introdução
Neste laboratório, você aprenderá como usar efetivamente o comando docker container wait. Este comando é uma ferramenta poderosa para scripting e automação, permitindo que você pause a execução até que um container especificado seja parado.
Você começará iniciando um container Docker em segundo plano usando o modo detached (-d). Em seguida, você usará docker container wait para bloquear seu terminal até que este container em segundo plano termine sua execução. Para demonstrar o comportamento de bloqueio, você irá parar o container de um terminal separado. Finalmente, você observará o código de saída retornado pelo comando docker container wait, entendendo como ele sinaliza o status de terminação do container.
Iniciar um container em segundo plano
Nesta etapa, você aprenderá como iniciar um container Docker em segundo plano. Executar um container em segundo plano permite que ele opere sem ocupar seu terminal, o que é útil para serviços ou aplicações de longa duração.
Primeiro, vamos fazer o pull da imagem alpine. Esta é uma imagem de distribuição Linux muito pequena que é útil para testes.
docker pull alpine
Você deve ver uma saída indicando que a imagem está sendo puxada e baixada.
Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
Agora, iniciaremos um container alpine em segundo plano usando a flag -d. A flag -d significa "detached mode" (modo desanexado). Também executaremos um comando simples dentro do container, sleep 30, que fará com que o container execute por 30 segundos antes de sair.
docker run -d alpine sleep 30
Após executar este comando, o Docker imprimirá o ID completo do container.
<container_id>
Para verificar se o container está rodando em segundo plano, você pode usar o comando docker ps. Este comando lista todos os containers atualmente em execução.
docker ps
Você deve ver uma saída semelhante a esta, mostrando seu container alpine em execução:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> alpine "sleep 30" X seconds ago Up X seconds <container_name>
A coluna STATUS deve mostrar Up seguido pela duração em que o container está rodando. Isso confirma que o container está rodando em modo desanexado.
Usar docker container wait para bloquear até que o container pare
Nesta etapa, você aprenderá como usar o comando docker container wait. Este comando bloqueia até que um ou mais containers parem e, em seguida, imprime seus códigos de saída. Isso é útil quando você precisa esperar que um processo em segundo plano em um container seja concluído antes de prosseguir com outras tarefas.
Primeiro, vamos obter o ID do container que iniciamos na etapa anterior. Podemos usar docker ps -q para obter apenas o ID do container em execução.
docker ps -q
Este comando exibirá o ID do container. Copie este ID, pois você precisará dele para o próximo comando.
<container_id>
Agora, use o comando docker container wait seguido pelo ID do container que você acabou de obter.
docker container wait <container_id>
Quando você executar este comando, seu terminal parecerá travar. Este é o comportamento esperado. O comando docker container wait é bloqueante, o que significa que ele pausará a execução até que o container especificado pare. Como o container está atualmente executando o comando sleep 30, este comando esperará por até 30 segundos para que o container termine.
Assim que o container parar (seja completando seu comando sleep 30 ou sendo parado manualmente), o comando docker container wait será desbloqueado e imprimirá o código de saída do container.
Por exemplo, se o container parar com sucesso após 30 segundos, você verá:
0
Um código de saída 0 normalmente indica que o comando dentro do container foi concluído com sucesso.
Mantenha esta janela do terminal aberta, pois interagiremos com este comando de espera na próxima etapa.
Parar o container em outro terminal
Nesta etapa, você abrirá um novo terminal e parará o container em execução. Isso demonstrará como o docker container wait no primeiro terminal reage quando o container é parado externamente.
Abra uma nova janela do terminal no ambiente LabEx. Você geralmente pode fazer isso clicando no ícone "+" ou selecionando "Novo Terminal" em um menu.
Neste novo terminal, precisamos identificar o container em execução novamente. Use docker ps para listar os containers em execução e encontrar o ID do container.
docker ps
Você verá uma saída semelhante à da etapa anterior, mostrando o ID do container, a imagem, o comando, etc.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> alpine "sleep 30" X minutes ago Up X minutes <container_name>
Agora, use o comando docker stop seguido pelo ID do container para parar o container.
docker stop <container_id>
Você deve ver o ID do container impresso de volta no terminal, indicando que o comando de parada foi bem-sucedido.
<container_id>
Volte para a primeira janela do terminal onde você executou docker container wait. Você deve observar que o comando docker container wait agora foi finalizado e imprimiu um código de saída. Examinaremos este código de saída na próxima etapa.
Observar o código de saída do docker container wait
Nesta etapa final, examinaremos o código de saída que foi impresso pelo comando docker container wait no primeiro terminal.
Volte para a primeira janela do terminal onde você executou o comando docker container wait <container_id>.
Você deve ver um número impresso na linha após o comando. Este número é o código de saída do container.
137
Na etapa anterior, você parou o container usando docker stop. Quando um container é parado usando docker stop, o Docker envia um sinal SIGTERM para o processo principal no container e, após um período de carência, um sinal SIGKILL se o processo não tiver saído. Um código de saída 137 é um indicador comum de que um processo foi terminado por um sinal SIGKILL (128 + 9, onde 9 é o número do sinal para SIGKILL).
Isso demonstra que docker container wait não apenas espera o container parar, mas também fornece o código de saída, que pode fornecer informações sobre como o container parou. Se o container tivesse terminado seu comando sleep 30 naturalmente, o código de saída teria sido 0.
Você pode verificar se o container foi parado executando docker ps -a em qualquer um dos terminais. A flag -a mostra todos os containers, incluindo os que foram parados.
docker ps -a
Você deve ver seu container alpine listado, e seu status deve ser Exited (<exit_code>).
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> alpine "sleep 30" X minutes ago Exited (137) X seconds ago <container_name>
Isso conclui o laboratório sobre o uso de docker container wait. Você aprendeu como iniciar um container em segundo plano, esperar que ele pare usando docker container wait, pará-lo de outro terminal e observar o código de saída resultante.
Resumo
Neste laboratório, você aprendeu como iniciar um container Docker em segundo plano usando a flag -d e o comando docker run, verificando seu status com docker ps. Você também começou a explorar o comando docker container wait, entendendo seu propósito em bloquear a execução até que um container especificado pare e, em seguida, retornar seu código de saída.



