
Quero inspecionar uma imagem docker criada por outra pessoa com um ponto de entrada e um cmd especificados, por exemplo:
ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]
Atualmente faço:
docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login
Existe uma maneira de substituir o CMD para ficar vazio (para não precisar usar "--login")?
Responder1
Você pode simplesmente entrar via docker run -it --entrypoint=/bin/bash $IMAGE -i
(você iniciará um novo contêiner a partir da imagem e obterá um shell bash no modo interativo) e executará o comando entrypoint nesse contêiner.
Você pode então inspecionar o contêiner em execução no estado em que deveria estar em execução.
EDIT: Desde o Docker 1.3 você pode usar exec
para executar um processo em um contêiner em execução. Inicie seu contêiner como faria normalmente e, em seguida, insira-o emitindo:
docker exec -it $CONTAINER_ID /bin/bash
Supondo que o bash esteja instalado, você terá acesso shell ao contêiner em execução.
Responder2
Ver:https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults
Parte relevante:
CMD (comando ou opções padrão) Lembre-se do COMMAND opcional na linha de comando do Docker:
$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
Este comando é opcional porque a pessoa que criou a IMAGE pode já ter fornecido um COMMAND padrão usando o Dockerfile CMD. Como operador (a pessoa que executa um contêiner a partir da imagem), você pode substituir esse CMD apenas especificando um novo COMANDO.
Se a imagem também especificar um ENTRYPOINT, o CMD ou o COMMAND serão anexados como argumentos ao ENTRYPOINT.
Então, para fazer o que você quer, você precisaapenasespecifique um cmd e substitua usando /bin/bash
. Não é exatamente "vazio", mas dá conta do recado em 99%.
Responder3
Para qualquer um que venha aqui substituir o ponto de entrada E o comando para passar outro comando, por exemplo, execute o bash em vez do script do ponto de entrada e, em seguida, execute algum outro comando com parâmetros (não ficou claro para mim em outras respostas):
docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'
-c 'npm link ...'
é o parâmetro, /bin/sh
então aqui você pode passar qualquer comando que queira executar no contêiner. /bin/sh
é para imagens alpinas, /bin/bash
provavelmente para outras imagens.