Назад к вопросам
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 не задан.
Это позволяет гибко настраивать поведение контейнера.