Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Docker run -it não funciona com CMD setado

Olá, boa noite!

Estava fazendo algumas práticas com o Dockerfile e esbarrei com uma coisa que não entendi. Eu criei a imagem Docker a partir do seguinte Dockerfile:

ARG CODE_VERSION=3.15.0
FROM alpine:${CODE_VERSION}

ENV NAME="LUIS OTAVIO"

CMD ["/bin/sh", "-c", "echo Comando executado pelo CMD por $NAME"]

Quando executei o comando docker run -it , o container simplesmente executou o que estava dentro do CMD e depois parou. Fiz o teste novamente removendo o comando CMD da imagem Docker e quando rodei o docker run -it , consegui "entrar" no container.

Li a documentação, mas não consegui chegar a nenhuma conclusão a respeito disso, podem me ajudar?

1 resposta
solução!

Boa Tarde, Luis, tudo bem?

Isso acontece por o 'CMD' é uma instrução cuja a função é fornecer o padrão para execução do container. Basicamente um container só 'existe' até receber um 'exit' da execução default.

Na pratica o seu container esta funcionando perfeitamente, de acordo com o que voce escreveu, ou seja, um container que vai dar um echo e pronto.

Quando voce executa o docker run -it e o mesmo comando, por conta da opção interativa (-it) o container vai esperar o 'exit' do usuario.

Pelo que entendi, o que voce queria era o docker dar o echo e depois abrir o shell para voce. Para isso voce poderia fazer assim:

ARG CODE_VERSION=3.15.0
FROM alpine:${CODE_VERSION}

#necessario adicionar o bash nas versoes anteriores ao 3.3
RUN apk update && apk add bash

#Adiciona o seu script no container
ADD shell.sh /usr/local/bin/shell.sh

#da a permissao de exec
RUN chmod 777 /usr/local/bin/shell.sh

ENV NAME="LUIS OTAVIO"

CMD /usr/local/bin/shell.sh

Onde shell.sh seria:

#!/bin/bash

echo Comando executado pelo CMD por $NAME > /tmp/luis.txt

/bin/bash

Nesse caso o CMD não teria um exit, pois o '/bin/bash' no script garantiria que vai continuar funcionando.