Docker Differenza tra ENTRYPOINT e CMD


Esempio

Esistono due direttive Dockerfile per specificare quale comando eseguire per impostazione predefinita nelle immagini create. Se si specifica solo CMD finestra mobile eseguirà tale comando utilizzando il comando ENTRYPOINT predefinito, che è /bin/sh -c . È possibile sovrascrivere uno o entrambi il punto di accesso e / o il comando quando si avvia l'immagine costruita. Se si specificano entrambi, ENTRYPOINT specifica l'eseguibile del processo contenitore e CMD verrà fornito come parametri di tale eseguibile.

Ad esempio se il tuo Dockerfile contiene

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

Quindi si utilizza la direttiva ENTRYPOINT predefinita di /bin/sh -c e in esecuzione /bin/date con quel punto di accesso predefinito. Il comando del processo del contenitore sarà /bin/sh -c /bin/date . Una volta eseguita questa immagine, per impostazione predefinita verrà stampata la data corrente

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

È possibile eseguire l'override di CMD sulla riga di comando, nel qual caso verrà eseguito il comando specificato.

$ docker run test /bin/hostname
bf0274ec8820

Se si specifica una direttiva ENTRYPOINT , Docker utilizzerà quell'eseguibile e la direttiva CMD specifica i parametri predefiniti del comando. Quindi se il tuo Dockerfile contiene:

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

Quindi eseguirlo produrrà

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

È possibile fornire diversi parametri se lo si desidera, ma verranno eseguiti tutti /bin/echo

$ docker run test Hi
Hi

Se si desidera sovrascrivere il punto di accesso elencato nel file Docker (ovvero se si desidera eseguire un comando diverso da echo in questo contenitore), è necessario specificare il parametro --entrypoint sulla riga di comando:

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

In genere si utilizza la direttiva ENTRYPOINT per puntare all'applicazione principale che si desidera eseguire e CMD ai parametri predefiniti.