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

如何在Docker Compose配置中将.env文件变量传入Dockerfile构建阶段使用

问题原因

你当前配置的environment字段仅作用于容器运行时的环境变量,不会传递到镜像构建阶段,因此Dockerfile在构建过程中无法读取到该值,和变量的引号、大括号写法无关。

要实现构建阶段读取.env中的变量,需要使用Docker的构建参数(ARG) 来传递值,修改步骤如下:

步骤1:修改docker-compose.yml配置

将需要传递的变量配置到build.args字段下,Docker Compose会自动加载.env中的变量进行替换:

version: "2"
services:
  my-app:
    build:
      context: .
      args:
        # 构建参数名: 从.env加载的变量
        my_app_version: $MY_APP_VER
    container_name: my_app
    # 如果容器运行时也需要该变量,可以保留environment字段,否则可以删除
    environment:
      - my_app_version=$MY_APP_VER

步骤2:修改Dockerfile接收构建参数

需要先通过ARG指令声明要接收的构建参数,之后就可以在整个构建阶段使用该变量:

FROM scratch
# 声明接收构建参数
ARG my_app_version
# 如果需要容器运行时也保留该变量,可以赋值给ENV,不需要可以省略这行
ENV my_app_ver=$my_app_version
# 构建阶段可以直接读取变量,拼接URL时建议用大括号包裹变量名避免识别错误
RUN echo ${my_app_ver}
# 示例:拼接下载URL
# RUN wget https://example.com/app/${my_app_version}/install.tar.gz

语法说明

  • 变量拼接场景下推荐使用${变量名}的大括号写法,避免变量名和后续字符拼接时Docker识别错误
  • 如果变量值没有空格、特殊符号,不需要额外加引号,有特殊符号时直接在.env文件中给变量值包裹引号即可

内容的提问来源于stack exchange,提问作者Saša Vranić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:00:04