Pregunta ¿Cómo puedo anular CMD al ejecutar una imagen de ventana acoplable?


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

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

Actualmente hago:

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

¿Hay alguna forma de reemplazar CMD para que esté vacío (por lo que no tengo que usar "--login")?


82
2018-05-10 12:59


origen




Respuestas:


Usted podría simplemente entrar a través de docker run -it --entrypoint=/bin/bash $IMAGE -i (lanzará un nuevo contenedor desde la imagen y obtendrá un shell bash en modo interactivo), luego ejecute el comando entrypoint en ese contenedor.

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

EDITAR: Desde Docker 1.3 puedes usar exec para 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 se haya instalado bash, se le dará acceso de shell al contenedor en ejecución.


90
2018-05-12 09:28



¿No ejecutaría eso "/ usr / sbin / apache2ctl / bin / bash"? (debido a que su ejemplo no anula el punto de entrada, utilizará el punto de entrada definido en el Dockerfile, ¿o me falta algo?) - warp
¿Es eso algo que es diferente para las versiones más antiguas / nuevas quizás? Ciertamente corre el punto de entrada para mí: gist.github.com/warpr/26a5cc471dce7fcf9021 . Esto está utilizando docker 0.10.0 en Ubuntu 13.10. - warp
Paso -entrypoint anula el punto de entrada. Ver la respuesta editada - Panagiotis Moustafellos
Sé que pasar --entrypoint anula el punto de entrada. Pero cuando uso --entrypoint, ¿cómo invalido CMD para estar vacío? (Para bash puedo usar algo como -i o --login, pero no todos los puntos de entrada que quiera usar tendrán un argumento "ficticio" equivalente). - warp
Al menos en Docker v1.11.1 parece que anular el --entrypoint también evita la adición normal de CMD al punto de entrada. Eso solo parece suceder cuando el punto de entrada no se anula. - Jasmine Hegman


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

Porción relevante:

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

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

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

Si la imagen también especifica un ENTRYPOINT, entonces el CMD o el COMANDO se adjuntan como argumentos al ENTRYPOINT.

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


19
2018-06-12 07:31



Ups, pasé por alto un detalle. Salvo acortamiento. --logina -l Supongo que tu solución ya es tan buena como es posible. - Simon Thum
Esto es algo divertido que vi hoy: el comando no se anula, se anexa. Aquí está el PS desde el interior del contenedor. Tenga en cuenta que el comando que agregué fue echo "configurando la base de datos" y que el comando incorporado es / usr / bin / geth. También puse el punto de entrada como "". 1 ? Ssl 0:00 /usr/bin/geth echo setting up db - Paul S
El enlace de referencia de la ventana acoplable ya no funciona, no se puede encontrar un reemplazo obvio para él. - Chris Kimpton
Simplemente lo arreglé, pero también me costó encontrarlo ( - Simon Thum


Para cualquier persona que venga aquí para anular el punto de entrada Y para pasar otro comando, por ejemplo. ejecute bash en lugar de entrypoint script y luego ejecute algún otro comando con parámetros (no estaba claro para mí en otras respuestas):

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

-c 'npm link ...' es parametro para /bin/sh así que aquí puedes pasar cualquier comando que quieras ejecutar en el contenedor. /bin/sh es para imágenes alpinas, /bin/bash más probable para otras imágenes.


7
2018-05-04 07:28



solo los comandos de shell de una adición deben ser escritos basados ​​en json, así que en lugar de citar con comillas simples '...' usar comillas dobles "..." - Jimmy Obonyo Abor