构建后如何运行Docker命令?

时间:2020-07-08 17:10:58

标签: python docker amazon-elastic-beanstalk

我有一个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上执行。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

有一种使用Docker ENTRYPOINT进行首次设置,然后启动CMD的模式。例如,您可以编写一个入口点脚本,例如

#!/bin/sh

# Do the first-time setup
python3 download.py

# Run the CMD
exec "$@"

由于这是Shell脚本,因此您可以在此处包括所需的任何逻辑或其他设置。

在您的Dockerfile中,需要在此脚本中将ENTRYPOINT行更改为CMDCOPY,并将其设置为映像的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....