Что произойдет, если указать и ENTRYPOINT, и CMD в Dockerfile?

«Что произойдет, если указать и ENTRYPOINT, и CMD в Dockerfile?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При совместном использовании ENTRYPOINT и CMD в Dockerfile, ENTRYPOINT определяет исполняемую команду, а CMD предоставляет для нее аргументы по умолчанию. При запуске контейнера аргументы, переданные в команде docker run, заменяют весь CMD, но не переопределяют ENTRYPOINT.

Пример Dockerfile:

FROM alpine:latest
ENTRYPOINT ["echo"]
CMD ["Hello from default CMD"]

Поведение:

  • docker run my-image → выполнится echo "Hello from default CMD".
  • docker run my-image Custom Argument → выполнится echo "Custom Argument". Аргументы из командной строки полностью заменили CMD.

Практическое применение: Эта комбинация позволяет создавать образы, которые ведут себя как исполняемые файлы (благодаря ENTRYPOINT), но с гибкостью настройки параметров запуска через CMD или аргументы командной строки.