如何将环境变量传递给 Docker 容器
如何将环境变量传递给 Docker 容器
技术背景
在使用 Docker 容器时,经常需要向容器内传递环境变量,例如数据库连接字符串、API 密钥等。这些环境变量可以用于配置容器内应用程序的行为,避免硬编码敏感信息,提高应用程序的灵活性和可配置性。
实现步骤
1. 使用 -e
或 --env
标志
在运行容器时,可以使用 -e
或 --env
标志来传递单个或多个环境变量。例如:
1 |
|
也可以从当前环境中获取变量值:
1 |
|
2. 使用 --env-file
标志
如果有多个环境变量,特别是包含敏感信息的变量,可以使用 --env-file
标志指定一个环境变量文件。文件中的每一行应采用 VAR=VAL
格式。例如:
1 |
|
3. 在 docker-compose.yml
中传递环境变量
在使用 docker-compose
启动容器时,可以在 docker-compose.yml
文件中传递环境变量。例如:
1 |
|
4. 在 Dockerfile 中设置环境变量
可以在 Dockerfile 中使用 ENV
指令设置环境变量。例如:
1 |
|
核心代码
使用 -e
标志传递多个环境变量
1 |
|
使用 --env-file
标志传递环境变量
1 |
|
在 docker-compose.yml
中传递环境变量
1 |
|
在 Dockerfile 中设置环境变量
1 |
|
最佳实践
- 安全性:对于敏感信息(如数据库密码、API 密钥等),建议使用
--env-file
或docker-compose
中的环境变量配置,并确保文件的访问权限得到严格控制。 - 可维护性:将环境变量集中管理,避免在多个地方重复设置相同的变量。可以使用
.env
文件来存储通用的环境变量,并在docker-compose.yml
中引用。 - 灵活性:使用变量默认值和引用,例如
${VAR:-default}
,以提高配置的灵活性。
常见问题
1. 环境变量未生效
确保 -e
或 --env
标志在容器名称之前,并且环境变量的格式正确。例如:
1 |
|
2. --env-file
中引号问题
docker run
命令在处理 --env-file
时,会将引号视为变量值的一部分。可以使用单引号替换双引号,或者使用更复杂的解决方案,如在容器内部设置环境变量。
3. docker-compose
中环境变量未传递
确保在 docker-compose.yml
文件中正确引用了环境变量,并且 .env
文件存在且格式正确。
如何将环境变量传递给 Docker 容器
https://119291.xyz/posts/2025-04-22.how-to-pass-environment-variables-to-docker-containers/