Sobes.tech
Назад к вопросам
Middle
5

Разница между ENTRYPOINT и CMD в Dockerfile?

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

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

sobes.tech AI

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

  • ENTRYPOINT определяет основной исполняемый файл контейнера. Он всегда запускается и не может быть переопределён аргументами командной строки при запуске контейнера (если не использовать --entrypoint). Это позволяет сделать контейнер более предсказуемым.

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

Пример:

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

При запуске контейнера по умолчанию выполнится /usr/bin/python3 app.py. Если при запуске указать другие аргументы, например docker run image script.py, то команда будет /usr/bin/python3 script.py.

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

CMD ["echo", "Hello"]

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

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