Docker Diferencia entre ENTRYPOINT y CMD


Ejemplo

Hay dos directivas de Dockerfile para especificar qué comando se ejecutará de forma predeterminada en las imágenes integradas. Si solo especifica CMD , la ENTRYPOINT acoplable ejecutará ese comando usando el ENTRYPOINT predeterminado, que es /bin/sh -c . Puede anular cualquiera de los puntos de entrada y / o el comando al iniciar la imagen construida. Si especifica ambos, entonces ENTRYPOINT especifica el ejecutable de su proceso contenedor, y CMD se suministrará como los parámetros de ese ejecutable.

Por ejemplo, si su Dockerfile contiene

FROM ubuntu:16.04
CMD ["/bin/date"]

Entonces está utilizando la directiva predeterminada ENTRYPOINT de /bin/sh -c , y ejecutando /bin/date con ese punto de entrada predeterminado. El comando de su proceso contenedor será /bin/sh -c /bin/date . Una vez que ejecute esta imagen, por defecto imprimirá la fecha actual

$ docker build -t test .
$ docker run test
Tue Jul 19 10:37:43 UTC 2016

Puede anular CMD en la línea de comando, en cuyo caso ejecutará el comando que ha especificado.

$ docker run test /bin/hostname
bf0274ec8820

Si especifica una directiva ENTRYPOINT , Docker usará ese ejecutable, y la directiva CMD especifica los parámetros predeterminados del comando. Así que si tu Dockerfile contiene:

FROM ubuntu:16.04
ENTRYPOINT ["/bin/echo"]
CMD ["Hello"]

Entonces ejecutarlo producirá

$ docker build -t test .
$ docker run test
Hello

Puede proporcionar diferentes parámetros si lo desea, pero todos se ejecutarán /bin/echo

$ docker run test Hi
Hi

Si desea anular el punto de entrada listado en su Dockerfile (es decir, si desea ejecutar un comando diferente al echo en este contenedor), debe especificar el parámetro --entrypoint en la línea de comandos:

$ docker run --entrypoint=/bin/hostname test
b2c70e74df18

Por lo general, usa la directiva ENTRYPOINT para apuntar a la aplicación principal que desea ejecutar y CMD a los parámetros predeterminados.