【问题标题】:How can I run a Docker command after building?构建后如何运行 Docker 命令?
【发布时间】:2023-03-24 14:57:02
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • 是否每次基于此镜像启动容器时都运行python3 download.py?然后你必须将入口点更改为sh -c 'python3 download.py; python3 -m flask run --host=0.0.0.0'
  • 是的,但我只希望它在我部署到 Elastic Beanstalk 时运行
  • 这不是 Docker 要解决的问题,至少不是直接解决的问题。您的入口点可能是一个小的 shell 脚本,它接受一个参数来确定在运行flask 之前是否运行download.py。如果在 ElasticBeanstalk 上运行,则提供一个参数,否则提供不同的参数。

标签: python docker amazon-elastic-beanstalk


【解决方案1】:

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

【讨论】:

  • 如何从 Elastic Beanstalk 传递该变量?
  • 您可以检查 ElasticBeanstalk 中是否存在,因此如果不存在则表示它是 ElasticBeanstalk,您无需运行下载脚本。类似这个链接的东西:stackoverflow.com/a/39296583/1563297
【解决方案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

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多