我有一个qlineedit
:
Dockerfile
但是我还想在运行
FROM ubuntu:18.04
RUN apt-get -y update
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update -y
RUN apt-get install -y python3.7 build-essential python3-pip
RUN pip3 install --upgrade pip
ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8
ENV FLASK_APP application.py
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
EXPOSE 5000
ENTRYPOINT python3 -m flask run --host=0.0.0.0
之前先运行python3 download.py
。如果我把它放在这里,然后是ENTRYPOINT
,那么它将在这里执行。我需要它仅在ElasticBeanstalk上执行。
我该怎么做?
答案 0 :(得分:2)
有一种使用Docker ENTRYPOINT
进行首次设置,然后启动CMD
的模式。例如,您可以编写一个入口点脚本,例如
#!/bin/sh
# Do the first-time setup
python3 download.py
# Run the CMD
exec "$@"
由于这是Shell脚本,因此您可以在此处包括所需的任何逻辑或其他设置。
在您的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
如果要调试此命令,由于此设置遵循“命令”部分,因此您可以运行一个一次性容器,该容器启动交互式外壳程序,而不是Flask进程。仍然会进行首次设置,但是然后从docker run
命令而不是CMD
行中运行命令。
docker run --rm -it myimage bash
答案 1 :(得分:1)
您可以使用环境变量控制是否运行python3 download.py
。然后在本地运行docker run -e....