You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Python 3.9 Docker镜像传入字符串类型命令行参数(CLA)

实现方案

一、现有Python脚本修正

现有脚本存在两处可优化点:一是漏导入sys模块,二是已经引入argparse做参数解析却直接读取sys.argv,可以优化为直接使用解析后的参数,规范度更高。
修正后的代码如下:

import sys
if __name__ == '__main__':
    import argparse

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

    if args.var == 'prod':
        currentvar = TestPrerequisiteService(ENVPath, prod)
    elif args.var == 'test':
        currentvar = TestPrerequisiteService(ENVPath, test)
    else:
        print("Invalid variable")
        exit(1)

二、容器启动时传入命令行参数

方案说明

通过Docker的ENTRYPOINT固定启动命令、CMD设置默认参数的方式,可以灵活实现启动时动态传参,比直接覆盖CMD的方式易用性更高。

Dockerfile修改

现有Dockerfile末尾的启动命令修改如下,同时可以删除开头冗余的ADD /app/main.py . ADD /app/Connect.py .,因为后续已经有COPY ./app ./app会把整个app目录复制到镜像内,避免文件冲突:

FROM python:3.9

# Chrome、chromedriver安装、依赖安装步骤保持不变

COPY requirements.txt .

RUN pip install -r requirements.txt

WORKDIR /microservices

COPY ./app ./app

# 固定启动命令
ENTRYPOINT ["python", "./app/main.py"]
# 设置默认启动参数,启动容器不加参数时默认使用test
CMD ["test"]

使用示例

  • 构建镜像:docker build -t test-app .
  • 启动时传入prod参数:docker run --rm test-app prod
  • 不加参数启动时,自动使用默认的test参数:docker run --rm test-app

三、镜像构建时传入字符串参数

如果需要在镜像构建阶段传入参数(比如设置默认运行环境、配置编译参数等),可以使用Docker的ARG指令实现:

Dockerfile修改示例

FROM python:3.9
# 定义构建参数,可同时设置默认值
ARG BUILD_ENV=test
# 可选:把构建参数转为运行时环境变量,Python脚本中可通过os.environ直接读取
ENV APP_ENV=${BUILD_ENV}

# 其余安装步骤保持不变
ENTRYPOINT ["python", "./app/main.py"]
# 用构建参数设置默认启动参数
CMD [${BUILD_ENV}]

使用示例

构建时传入参数会覆盖ARG设置的默认值:
docker build --build-arg BUILD_ENV=prod -t test-app .

内容的提问来源于stack exchange,提问作者Callum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:42:01