Looking for docker Keywords? Try Ask4Keywords

Docker Разница между ENTRYPOINT и CMD


пример

Существует две директивы Dockerfile для указания, какую команду запускать по умолчанию в построенных изображениях. Если вы укажете только CMD то докер выполнит эту команду, используя стандартную ENTRYPOINT , которая является /bin/sh -c . При запуске встроенного образа вы можете переопределить любую или оба точки входа и / или команды. Если вы укажете оба, то ENTRYPOINT указывает исполняемый файл вашего контейнерного процесса, а CMD будет предоставлен в качестве параметров этого исполняемого файла.

Например, если ваш Dockerfile содержит

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

Затем вы используете директиву ENTRYPOINT по умолчанию /bin/sh -c и run /bin/date с этой точкой входа по умолчанию. Команда вашего процесса контейнера будет /bin/sh -c /bin/date . После запуска этого изображения оно будет по умолчанию распечатывать текущую дату

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

Вы можете переопределить CMD в командной строке, и в этом случае он выполнит указанную вами команду.

$ docker run test /bin/hostname
bf0274ec8820

Если вы укажете директиву ENTRYPOINT , Docker будет использовать этот исполняемый файл, а директива CMD задает параметры (параметры) по умолчанию. Поэтому, если ваш Dockerfile содержит:

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

Тогда запуск будет производить

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

Вы можете предоставить различные параметры, если хотите, но все они будут запускать /bin/echo

$ docker run test Hi
Hi

Если вы хотите переопределить точку входа, указанную в вашем файле Docker (т. Е. Если вы хотите запустить другую команду, чем echo в этом контейнере), вам нужно указать параметр --entrypoint в командной строке:

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

Обычно вы используете директиву ENTRYPOINT чтобы указать на основное приложение, которое вы хотите запустить, и CMD на параметры по умолчанию.