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

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

Ответ

Если указан только ENTRYPOINT, контейнер всегда будет запускаться с этой командой. Аргументы по умолчанию отсутствуют, поэтому все аргументы для команды необходимо передавать явно при запуске.

Пример Dockerfile (exec-форма):

ENTRYPOINT ["curl", "-s"]
  • docker run my-image https://example.com → выполнится curl -s https://example.com. Аргументы командной строки добавляются к списку аргументов ENTRYPOINT.

Важное отличие shell-формы:

ENTRYPOINT curl -s

В этом случае команда выполняется через /bin/sh -c. Это может изменить обработку сигналов и переменных окружения, но аргументы из docker run не будут переданы в curl. Для передачи аргументов в shell-форме нужно использовать "$@": ENTRYPOINT ["sh", "-c", "curl -s "$@"", "--"]. Рекомендуется всегда использовать exec-форму (в виде JSON-массива) для корректной передачи сигналов и аргументов.