linux中docker环境变量配置需按场景选择:dockerfile用env设默认非敏感值;docker run用-e或--env-file注入可变/敏感参数;docker-compose.yml通过environment或env_file统一管理多服务变量。

在 Linux 系统中给 Docker 容器配置环境变量,关键在于明确“谁来设”和“容器里谁来用”。环境变量不是设了就自动生效,必须由应用主动读取,而设置方式要按场景选:构建阶段固定值用 Dockerfile,运行时可变或敏感参数用 docker run 或 docker-compose.yml 注入。
在 Dockerfile 中设默认值(适合非敏感、通用参数)
Dockerfile 的 ENV 指令定义的变量,在镜像构建时写入,并在容器启动后默认可用。它适合端口、基础路径、版本号这类不随环境变化的值。
- 语法示例:
ENV PORT=8080 LOG_LEVEL=info - 这些值会被所有基于该镜像启动的容器继承,但可被运行时参数覆盖
- 禁止在此处写密码、密钥、数据库连接串等敏感信息,因为它们会固化进镜像层,可能被他人提取
用 docker run 命令传入变量(适合调试或简单部署)
启动容器时通过 -e 或 --env 直接注入,灵活且即时生效,常用于开发或临时调整。
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 单个变量:
docker run -e TZ=Asia/Shanghai -e NODE_ENV=production nginx - 多个变量可重复使用
-e,顺序无关 - 若 Dockerfile 已设
ENV PORT=8080,这里加-e PORT=3000就会覆盖 - 注意大小写敏感,
DB_HOST和db_host是两个不同变量
用 --env-file 批量加载(推荐用于生产环境)
把所有变量集中写在一个本地文件(如 .env),再用 --env-file 加载。这种方式更安全、易维护,也避免敏感信息暴露在命令行历史或进程列表中。
- 准备
.env文件(不提交到 Git):NODE_ENV=production<br>DB_HOST=db-prod.internal<br>DB_PASSWORD=7xK!q9#mL2<br>API_TIMEOUT=5000
- 启动命令:
docker run --env-file .env my-app - 文件支持
#注释和空行,但不支持变量展开(如不能写HOME_DIR=$HOME) - 宿主机路径必须是相对当前目录或绝对路径;Docker 不校验文件是否存在,路径错则静默忽略
- 建议将
.env权限设为600:chmod 600 .env
在 docker-compose.yml 中统一管理(适合多服务协作)
对于编排多个容器的场景,docker-compose.yml 提供两种主流方式:
-
environment:直接在 service 下写死或引用 shell 变量(仅限非敏感值)
environment:<br> - TZ=Asia/Shanghai<br> - SPRING_PROFILES_ACTIVE=prod
-
env_file:加载外部
.env文件,与docker run --env-file行为一致,更适合管理敏感配置env_file:<br> - ./prod.env
- 还可配合项目根目录下的
.env(Compose 自动读取)来控制服务名、端口等模板变量,但它不影响容器内环境,仅用于 Compose 解析 YAML










