Лучшее использование для ENTRYPOINT - установить основную команду изображения, позволяя запускать это изображение, как если бы оно было этой командой (а затем использовать CMD в качестве флагов по умолчанию).
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#entrypoint
многие люди упускают этот момент из-за инструкций ENTRYPOINT
и CMD
Dockerfile.
инструкция ENTRYPOINT
, предназначенная для запуска некоторого исполняемого файла, который должензапускать каждый раз, когда вы запускаете контейнер, например запускать сервер.
CMD
должен включать флаги, предоставленные этому исполняемому файлу, чтобы их можно было легко переопределить при запуске контейнера.
Я не уверен, что у вас должно быть более одной CMD
инструкции.если вам нужно запускать команды во время процесса сборки, вы можете использовать инструкцию RUN
- например:
RUN mkdir some/dir
сейчас:
run.py - это основной файл флакона Python для выполнения
, поэтому я предлагаю вам определить его как точку входа:
ENTRYPOINT [ "./run.py" ]
команды, которые вы также можете запускать каждый раз, когда контейнерзапускает, например flask run --host=0.0.0.0
, вы можете:
переместить эту команду, чтобы она находилась внутри run.py
файла
или
держите линию CMD [ "flask", "run", "--host=0.0.0.0" ]
.эта команда будет передана в качестве аргумента точке входа run.py, поэтому вы можете выполнить ее там.таким образом, вы можете легко переопределить команду при запуске контейнера с альтернативными аргументами.
Этот материал также находится в документах :
Понять, как взаимодействуют CMD и ENTRYPOINT
Инструкции CMD и ENTRYPOINT определяют, какая команда выполняется при запуске контейнера.Есть несколько правил, которые описывают их взаимодействие.
В Dockerfile должна быть указана хотя бы одна из команд CMD или ENTRYPOINT.
ENTRYPOINT следует определять при использовании контейнера в качестве исполняемого файла.
CMD следует использовать как способ определения аргументов по умолчанию для команды ENTRYPOINT или для выполнения специальной команды в контейнере.
CMD будет переопределен при запуске контейнера с альтернативными аргументами.