Como posso substituir o CMD ao executar uma imagem do docker?

84

Eu quero inspecionar uma imagem do 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 como vazio (assim, não preciso usar "--login")?

    
por warp 10.05.2014 / 12:59

3 respostas

92

Você pode simplesmente digitar via docker run -it --entrypoint=/bin/bash $IMAGE -i (você lançará um novo contêiner da imagem e obterá um shell bash no modo interativo) e, em seguida, executará o comando entrypoint nesse contêiner.

Você pode inspecionar o contêiner em execução no estado em que ele deve estar sendo executado.

EDIT: Desde o Docker 1.3, você pode usar exec para executar um processo em um contêiner em execução. Inicie o seu contêiner como faria normalmente e, em seguida, insira-o:

docker exec -it $CONTAINER_ID /bin/bash

Assumindo que o bash está instalado, você receberá acesso ao shell do contêiner em execução.

    
por 12.05.2014 / 09:28
20

Veja: link

Porção 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...]

Esse comando é opcional porque a pessoa que criou a IMAGE já pode ter fornecido um COMMAND padrão usando o CMD Dockerfile. Como o operador (a pessoa que está executando um contêiner a partir da imagem), você pode substituir esse CMD apenas especificando um novo COMMAND.

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, é necessário somente especificar um cmd e substituir usando /bin/bash . Não é bem "vazio", mas faz o trabalho 99%.

    
por 12.06.2014 / 07:31
8

Para quem vem aqui para substituir o ponto de entrada E comando para passar outro comando, por exemplo execute bash em vez de script de ponto de entrada e, em seguida, execute outro comando com parâmetros (não ficou claro para mim a partir de outras respostas):

 docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'

-c 'npm link ...' é o parâmetro para /bin/sh , então você pode passar qualquer comando que queira executar no contêiner. /bin/sh é para imagens alpinas, /bin/bash é mais provável para outras imagens.

    
por 04.05.2017 / 07:28