Существует схема использования Docker ENTRYPOINT
для выполнения первоначальной настройки, а затем запуска CMD
. Например, вы можете написать сценарий точки входа, такой как
#!/bin/sh
# Do the first-time setup
python3 download.py
# Run the CMD
exec "$@"
Поскольку это сценарий оболочки, вы можете включить сюда любой лог c или дополнительные настройки, которые вам нужны.
В вашем Dockerfile , вам нужно изменить строку ENTRYPOINT
на CMD
, COPY
в этом скрипте и установить ее как ENTRYPOINT
.
...
COPY . /app
...
# If the script isn't already executable on the host
RUN chmod +x entrypoint.sh
# Must use JSON-array syntax
ENTRYPOINT ["/app/entrypoint.sh"]
# The same command as originally
CMD python3 -m flask run --host=0.0.0.0
Если вы хотите отладить это, поскольку это setup учитывает «командную» часть, вы можете запустить одноразовый контейнер, который запускает интерактивную оболочку вместо процесса Flask. Это по-прежнему будет выполнять первоначальную настройку, но затем выполните команду из команды docker run
вместо того, что было в строке CMD
.
docker run --rm -it myimage bash