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

如何向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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:45:02