如何向docker-compose命令传参以避免在配置中硬编码脚本参数
解决方案
以下两种方案均支持传入含空格的参数,无需硬编码到docker-compose.yml中:
方案1:通过命令行环境变量动态传参
步骤1:调整docker-compose.yml配置
修改app服务的配置,适配动态参数传入,同时保证空格参数正确解析:
version: '3' services: selenium: image: selenium/standalone-chrome ports: - 4444:4444 restart: always app: build: context: . volumes: - .:/app # 用entrypoint保证参数正确转义,原生支持带空格的参数 entrypoint: ["/bin/sh", "-c", "python3 my_script.py \"$@\"", "--"] depends_on: - selenium
步骤2:启动时传参
执行启动命令时,直接在命令前加环境变量传入参数,带空格的参数用单/双引号包裹即可:
# 示例:传入带空格的参数 SCRIPT_ARGS="-arg1 '带空格的参数值' -arg2 普通值" docker compose up
方案2:通过.env文件配置参数(适合固定参数场景)
如果参数不需要每次启动都修改,可以用本地.env文件存储参数,完全不需要频繁修改docker-compose.yml和启动命令:
步骤1:项目根目录新建.env文件
内容如下,带空格的参数直接用引号包裹:
SCRIPT_ARGS=-arg1 "带空格的参数值" -arg2 普通值
步骤2:调整docker-compose.yml配置
直接引用.env中的变量即可:
app: build: context: . volumes: - .:/app command: sh -c "python3 my_script.py \"${SCRIPT_ARGS}\"" depends_on: - selenium
后续要修改参数直接编辑.env文件即可,无需改动服务配置。
验证方式
如果要确认参数是否正确传递,可以在my_script.py开头加入以下代码打印接收的参数:
import sys print(f"接收到的参数:{sys.argv[1:]}")
内容的提问来源于stack exchange,提问作者Semion Polonsky
相关产品推荐
相关产品推荐

