¿Cómo puedo anular CMD cuando ejecuto una imagen de Docker?

¿Cómo puedo anular CMD cuando ejecuto una imagen de Docker?

Quiero inspeccionar una imagen de la ventana acoplable creada por otra persona con un punto de entrada y un cmd especificados, por ejemplo:

ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]

Actualmente hago:

docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login

¿Hay alguna manera de anular CMD para que esté vacío (para no tener que usar "--login")?

Respuesta1

Puede simplemente ingresar vía docker run -it --entrypoint=/bin/bash $IMAGE -i(lanzará un nuevo contenedor desde la imagen y obtendrá un shell bash en modo interactivo) y luego ejecute el comando de punto de entrada en ese contenedor.

Luego puede inspeccionar el contenedor en ejecución en el estado en que debería estar ejecutándose.

EDITAR: desde Docker 1.3, puede usarlo execpara ejecutar un proceso en un contenedor en ejecución. Inicie su contenedor como lo haría normalmente y luego ingréselo emitiendo:

docker exec -it $CONTAINER_ID /bin/bash

Suponiendo que bash esté instalado, se le dará acceso de shell al contenedor en ejecución.

Respuesta2

Ver:https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

Porción relevante:

CMD (comando u opciones predeterminados) Recupere el COMANDO opcional en la línea de comandos de Docker:

$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

Este comando es opcional porque es posible que la persona que creó la IMAGEN ya haya proporcionado un COMANDO predeterminado utilizando Dockerfile CMD. Como operador (la persona que ejecuta un contenedor a partir de la imagen), puede anular ese CMD simplemente especificando un nuevo COMANDO.

Si la imagen también especifica un PUNTO DE ENTRADA, entonces CMD o COMMAND se agregan como argumentos al PUNTO DE ENTRADA.

Así que para hacer lo que quieres necesitassoloespecifique un cmd y anule usando /bin/bash. No del todo "vacío", pero hace el trabajo al 99%.

Respuesta3

Para cualquiera que venga aquí para anular el punto de entrada Y el comando para pasar otro comando, por ejemplo, ejecute bash en lugar del script de punto de entrada y luego ejecute algún otro comando con parámetros (no me quedó claro en otras respuestas):

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

-c 'npm link ...'es un parámetro, por /bin/shlo que aquí puede pasar cualquier comando que desee ejecutar en el contenedor. /bin/shes para imágenes alpinas, /bin/bashmuy probablemente para otras imágenes.

información relacionada