Sobes.tech
Назад к вопросам
Senior
4

Чем отличается CMD от ENTRYPOINT в Dockerfile?

Компании, где спрашивали
CheckBox

Ответ от нейросети

sobes.tech AI

В Dockerfile директивы CMD и ENTRYPOINT задают команду, которая будет выполняться при запуске контейнера, но имеют разные цели и поведение:

  • ENTRYPOINT задаёт основной исполняемый файл контейнера. Он фиксирует, что именно будет запускаться, и позволяет контейнеру вести себя как исполняемый файл.
  • CMD задаёт аргументы по умолчанию для ENTRYPOINT или, если ENTRYPOINT не задан, команду по умолчанию.

Если в Dockerfile указаны обе директивы, то CMD передаётся как аргументы в ENTRYPOINT.

Пример:

ENTRYPOINT ["/usr/bin/python3"]
CMD ["app.py"]

При запуске контейнера будет выполнена команда:

/usr/bin/python3 app.py

Если при запуске контейнера указать другие аргументы, например:

docker run image other_script.py

то команда будет:

/usr/bin/python3 other_script.py

Если же указан только CMD, например:

CMD ["echo", "Hello World"]

то при запуске контейнера выполнится команда echo Hello World, но её можно переопределить аргументами при запуске.

Итого:

  • ENTRYPOINT фиксирует исполняемый файл.
  • CMD задаёт параметры по умолчанию или команду, если ENTRYPOINT не задан.

Это позволяет гибко настраивать поведение контейнера.