构建后如何运行Docker命令?

2024-06-01 05:35:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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

但是我还想在运行ENTRYPOINT之前运行python3 download.py。如果我把它放在这里,然后build,那么它在这里执行。我需要它只在ElasticBeanstalk上执行

我该怎么做


Tags: installpiprunpybuildenvappget
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

如果您想调试它,因为这个设置尊重“命令”部分,所以您可以运行一个一次性容器来启动一个交互式shell,而不是Flask进程。这仍将执行首次设置,但随后从docker run命令而不是CMD行中运行该命令

docker run  rm -it myimage bash

您可以控制是否使用环境变量运行python3 download.py。然后在本地运行docker run -e....

相关问题 更多 >