在Docker中配置和管理环境变量的详细指南

 更新时间:2025年06月20日 10:42:28   作者:思静鱼  
在 Docker 中,配置和管理环境变量是非常常见的需求,用于传递配置参数、控制服务行为、实现环境隔离(如开发/测试/生产),下面从镜像构建、容器运行、Docker Compose、.env 文件等角度全面讲解,需要的朋友可以参考下

一、在 Dockerfile 中设置环境变量

使用 ENV 指令设置环境变量:

FROM alpine
ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8
ENV APP_ENV=production

这些变量在容器构建时和运行时都可用。

二、在 docker run 时传入环境变量

1. 使用 -e 传递单个变量:

docker run -e APP_ENV=dev -e TZ=Asia/Shanghai my-image

2. 使用 --env-file 加载多个变量:

创建 .env 文件(每行一个):

APP_ENV=dev
TZ=Asia/Shanghai
DB_HOST=127.0.0.1
DB_USER=root

然后运行容器时加载:

docker run --env-file .env my-image

三、在 docker-compose.yml 中配置环境变量

方法 1:直接在 environment: 中配置

services:
  app:
    image: my-app
    environment:
      - APP_ENV=dev
      - DB_HOST=localhost

方法 2:引用 .env 文件(自动读取)

.env 文件内容:

APP_ENV=production
DB_HOST=db.local

Compose 文件中直接使用 ${VAR}

services:
  app:
    image: my-app
    environment:
      - APP_ENV=${APP_ENV}
      - DB_HOST=${DB_HOST}

注意: Compose 默认会自动读取同目录下的 .env 文件(无需额外指定)。

四、容器内部如何读取环境变量?

进入容器后使用:

docker exec -it my-container sh

# 查看环境变量
env

# 读取单个变量
echo $APP_ENV

五、注意事项与最佳实践

问题建议
敏感信息(如密码)避免写在 Dockerfile,建议运行时注入或用 Secret 管理
多环境配置使用 .env.dev, .env.prod 区分不同环境
配置优先级docker run -e > ENV in Dockerfile
修改变量重启容器变量更改后必须重启容器才生效

六、查看和调试容器中的环境变量

查看运行中容器的环境变量:

docker inspect <容器名> | grep -A 10 "Env"

示例输出:

"Env": [
    "APP_ENV=dev",
    "TZ=Asia/Shanghai"
]

七、环境变量注入 Java 程序(示例)

在 Spring Boot 项目中配置:

@Value("${APP_ENV}")
private String appEnv;

启动参数中注入:

docker run -e APP_ENV=dev my-spring-app

总结

场景用法
Dockerfile 中写死变量ENV KEY=value
启动时传变量-e KEY=value or --env-file
Compose 配置变量environment: + .env 文件
动态配置/安全注入推荐外部传入,不写死在镜像中

如果你需要:

  • 在 Docker 容器中读取数据库配置、环境标识等,
  • 使用 .env 文件多环境切换,
  • 或你想让 Java 程序读取环境变量作为配置

到此这篇关于在Docker中配置和管理环境变量的详细指南的文章就介绍到这了,更多相关Docker配置和管理环境变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 最详细的docker中安装并配置redis(图文详解)

    最详细的docker中安装并配置redis(图文详解)

    这篇文章主要介绍了最详细的docker中安装并配置redis(图文详解),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Docker拉取镜像部分成功部分失败的解决方案

    Docker拉取镜像部分成功部分失败的解决方案

    最近在部署 Zitadel 身份认证平台的过程中,遇到一个看似“随机”的问题:Docker 有些镜像可以拉取,有些却一直超时失败,最终通过配置 Docker 守护进程级别的代理 才解决,文章记录整个问题分析和解决过程,便于自己和大家后期参考,需要的朋友可以参考下
    2025-05-05
  • 使用Docker配置redis sentinel哨兵的方法步骤

    使用Docker配置redis sentinel哨兵的方法步骤

    本文主要介绍了Docker配置redis sentinel哨兵的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • docker 安装nacos并配置数据库的教程详解

    docker 安装nacos并配置数据库的教程详解

    这篇文章主要介绍了docker 安装nacos并配置数据库的教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 清除docker无用镜像实现过程

    清除docker无用镜像实现过程

    文章介绍了查看和清理Docker占用资源的方法,包括使用docker container ls、image ls、volume ls等命令了解资源状态,并通过docker system prune删除未使用容器、镜像、网络及缓存,同时强调删除镜像前需先移除引用容器
    2025-08-08
  • docker运行PostgreSQL数据库维护执行脚本备份数据库与更新表结构的方法

    docker运行PostgreSQL数据库维护执行脚本备份数据库与更新表结构的方法

    这篇文章主要介绍了docker运行PostgreSQL数据库维护,执行脚本备份数据库与更新表结构,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • docker 命令报异常permission denied的解决方案

    docker 命令报异常permission denied的解决方案

    这篇文章主要介绍了docker 命令报异常permission denied的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Docker开启Docker API方式

    Docker开启Docker API方式

    文章介绍了如何在Linux系统上开启Docker API,包括修改配置文件和修改docker服务配置两种方式,同时,还提供了解决配置冲突的异常解决方案,并验证API是否开启的方法
    2025-12-12
  • 使用Docker安装phabricator的配置和使用方法

    使用Docker安装phabricator的配置和使用方法

    今天小编就为大家分享一篇关于使用Docker安装phabricator的配置和使用方法的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Docker实现容器化的分布式锁服务RedisLock的快速搭建

    Docker实现容器化的分布式锁服务RedisLock的快速搭建

    本文主要介绍了Docker实现容器化的分布式锁服务RedisLock的快速搭建,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04

最新评论