将字符串的 CLA 传递到 Docker 映像中 - Python

Posted

技术标签:

【中文标题】将字符串的 CLA 传递到 Docker 映像中 - Python【英文标题】:Pass CLA of a String into a Docker Image - Python 【发布时间】:2021-11-06 14:39:38 【问题描述】:

我想将一个字符串传递给命令行参数,以便在启动 docker 容器时在 python 文件中设置类。我使用的是 python:3.9 的基础镜像。

在构建 docker 容器时如何传递字符串的 CLA

Python 脚本

if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(description='Pass the variable needed')
    parser.add_argument('var', type=str, help='variable')
    args = parser.parse_args()
    ENVPath = '/usr/local/bin/chromedriver'

    if sys.argv[1] == 'prod':
        currentvar = TestPrerequisiteService(ENVPath, prod)

    elif sys.argv[1] == 'test':
        currentvar = TestPrerequisiteService(ENVPath, test)
    else:
        print("Invalid variable")
        exit()

Dockerfile

FROM python:3.9

ADD /app/main.py .
ADD /app/Connect.py .

# Install Chrome WebDriver
RUN CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
    mkdir -p /opt/chromedriver-$CHROMEDRIVER_VERSION && \
    curl -sS -o /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \
    unzip -qq /tmp/chromedriver_linux64.zip -d /opt/chromedriver-$CHROMEDRIVER_VERSION && \
    rm /tmp/chromedriver_linux64.zip && \
    chmod +x /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver && \
    ln -fs /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver /usr/local/bin/chromedriver

# Install Google Chrome
RUN curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
    echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list && \
    apt-get -yqq update && \
    apt-get -yqq install google-chrome-stable && \
    rm -rf /var/lib/apt/lists/*

COPY requirements.txt .

RUN pip install -r requirements.txt

WORKDIR /microservices

COPY ./app ./app


CMD ["python","./app/main.py"]

我们将不胜感激:)

【问题讨论】:

运行 docker 容器时当前的输出是什么? @belfner 当我运行此命令“docker run -p 5000:5000 microservicestesting prod”时,我收到此错误来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:380:启动容器进程导致: exec: "prod": $PATH 中找不到可执行文件:未知。 什么是“产品”? 我试图作为 CLA 传递的字符串变量 【参考方案1】:

CMD 定义传递给容器入口点的参数。我相信您容器的当前入口点是/bin/sh,它将["python","./app/main.py"] 作为参数。当您使用docker run -p 5000:5000 microservicestesting prod 运行容器时,prod 会使用 CMD 覆盖 dockerfile 中定义的参数。

要获得您想要的功能,将 CMD 更改为 ENTRYPOINT,然后当您运行 docker run 命令时,prod 将作为参数传递给 ["python","./app/main.py"]

【讨论】:

以上是关于将字符串的 CLA 传递到 Docker 映像中 - Python的主要内容,如果未能解决你的问题,请参考以下文章