Das ENTRYPOINTgibt einen Befehl an, der immer ausgeführt wird, wenn der Container gestartet wird.
Das CMDgibt Argumente an, die dem zugeführt werden ENTRYPOINT.
Wenn Sie ein Bild für einen bestimmten Befehl erstellen möchten, verwenden Sie ENTRYPOINT ["/path/dedicated_command"]
Wenn Sie andernfalls ein Bild für allgemeine Zwecke erstellen möchten, können Sie es ENTRYPOINTnicht angeben und verwenden, CMD ["/path/dedicated_command"]da Sie die Einstellung überschreiben können, indem Sie Argumente an angeben docker run.
Zum Beispiel, wenn Ihre Docker-Datei:
FROM debian:wheezy
ENTRYPOINT ["/bin/ping"]
CMD ["localhost"]
Wenn Sie das Image ohne Argument ausführen, wird ein Ping an den lokalen Host gesendet:
$ docker run -it test
PING localhost (127.0.0.1): 48 data bytes
56 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.096 ms
56 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.088 ms
56 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.088 ms
^C--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.088/0.091/0.096/0.000 ms
Wenn Sie das Bild jetzt mit einem Argument ausführen, wird das Argument gepingt:
$ docker run -it test google.com
PING google.com (173.194.45.70): 48 data bytes
56 bytes from 173.194.45.70: icmp_seq=0 ttl=55 time=32.583 ms
56 bytes from 173.194.45.70: icmp_seq=2 ttl=55 time=30.327 ms
56 bytes from 173.194.45.70: icmp_seq=4 ttl=55 time=46.379 ms
^C--- google.com ping statistics ---
5 packets transmitted, 3 packets received, 40% packet loss
round-trip min/avg/max/stddev = 30.327/36.430/46.379/7.095 ms
Zum Vergleich, wenn Ihre Docker-Datei:
FROM debian:wheezy
CMD ["/bin/ping", "localhost"]
Wenn Sie das Image ohne Argument ausführen, wird ein Ping an den lokalen Host gesendet:
$ docker run -it test
PING localhost (127.0.0.1): 48 data bytes
56 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.076 ms
56 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.087 ms
56 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.090 ms
^C--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.076/0.084/0.090/0.000 ms
Wenn Sie das Image jedoch mit einem Argument ausführen, wird das folgende Argument ausgeführt:
docker run -it test bash
root@e8bb7249b843:/#
Weitere Informationen finden Sie in diesem Artikel von Brian DeHamer:
https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/