github编辑

ENV 设置环境变量

基本语法

# 格式一:单个变量
ENV <key> <value>

# 格式二:多个变量(推荐)
ENV <key1>=<value1> <key2>=<value2> ...

基本用法

设置单个变量

ENV NODE_VERSION 20.10.0
ENV APP_ENV production

设置多个变量

ENV NODE_VERSION=20.10.0 \
    APP_ENV=production \
    APP_NAME="My Application"

💡 包含空格的值用双引号括起来。


环境变量的作用

1. 后续指令中使用

2. 容器运行时使用

应用代码中可以读取:


支持环境变量的指令

以下指令可以使用 $变量名${变量名} 格式:

指令
示例

RUN

RUN echo $VERSION

CMD

CMD ["sh", "-c", "echo $HOME"]

ENTRYPOINT

同上

COPY

COPY . $APP_HOME

ADD

ADD app.tar.gz $APP_HOME

WORKDIR

WORKDIR $APP_HOME

EXPOSE

EXPOSE $PORT

VOLUME

VOLUME $DATA_DIR

USER

USER $USERNAME

LABEL

LABEL version=$VERSION

FROM

FROM node:$NODE_VERSION


运行时覆盖

使用 -e--env 覆盖 Dockerfile 中定义的环境变量:

.env 文件格式


ENV vs ARG

特性
ENV
ARG

生效时间

构建时 + 运行时

仅构建时

持久性

写入镜像,运行时可用

构建后消失

覆盖方式

docker run -e

docker build --build-arg

适用场景

应用配置

构建参数(如版本号)

组合使用


最佳实践

1. 统一管理版本号

2. 不要存储敏感信息

3. 为应用提供合理默认值

4. 使用有意义的变量名


常见问题

Q: 环境变量在 CMD 中不展开

exec 格式不会自动展开环境变量:

Q: 如何查看容器的环境变量

Q: 多行 ENV 还是多个 ENV


本章小结

要点
说明

语法

ENV KEY=value

作用范围

构建时 + 运行时

覆盖方式

docker run -e KEY=value

与 ARG

ARG 仅构建时,ENV 持久化到运行时

安全

不要存储敏感信息

延伸阅读

最后更新于