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

如何从Docker Compose中访问Shell环境变量?

实现Shell环境变量传递给Docker容器运行时(无需重新构建镜像)

你之前的问题出在用了构建阶段的build.args传递变量——这会触发镜像重新构建,而且根本不是运行时传递变量的正确方式。下面给你两种符合需求的实现方法:

方法一:修改docker-compose.yml配置运行时环境变量

直接在docker-compose.yml里用environment字段传递Shell中的环境变量,同时支持未指定变量时跑全部测试:

version: "3.6"
services:
  app_test:
    build:
      context: ..
      dockerfile: Dockerfile
    # 传递Shell中的TEST_NAME,未设置则传空值
    environment:
      - TEST_NAME=${TEST_NAME:-}

对应的Shell命令

# 指定单个测试用例运行
export TEST_NAME=test_widget_abc
docker-compose -f docker-compose.yml -p myproject up --exit-code-from app_test

# 运行全部测试(无需export变量,或执行unset TEST_NAME)
docker-compose -f docker-compose.yml -p myproject up --exit-code-from app_test

Dockerfile无需修改

保留你原来的配置即可,容器启动时environment传递的变量会覆盖Dockerfile里的ENV值:

ENV TEST_NAME ${TEST_NAME}
CMD python manage.py test $TEST_NAME

当TEST_NAME为空时,命令会自动变成python manage.py test,运行全部测试。

方法二:命令行临时传递变量(无需修改docker-compose.yml)

如果不想改动配置文件,也可以直接在docker-compose命令前临时设置变量:

# 指定测试用例
TEST_NAME=test_widget_abc docker-compose -f docker-compose.yml -p myproject up --exit-code-from app_test

# 运行全部测试
docker-compose -f docker-compose.yml -p myproject up --exit-code-from app_test

这种方式不需要提前export变量,变量仅对当前docker-compose进程生效,同样能传递到容器的运行时环境中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:30:56