在生产环境中通过容器/Docker 设置环境变量的实现方法,包括是否可以在 Docker 中使用 .env
文件的相关内容:
在 Docker 中设置环境变量的多种方式
-
在 Dockerfile 中设置 :
-
使用
ENV
指令设置环境变量,示例代码如下:FROM ubuntu:20.04 ENV MY_APP_PORT=8080 ENV MY_APP_ENV=production RUN echo "Starting app on port $MY_APP_PORT in $MY_APP_ENV mode"
这些环境变量会在容器的整个生命周期中生效,可以在容器内的任何进程访问。
-
-
在 docker run 命令中设置 :
-
使用
--env
或-e
标志为容器设置环境变量,示例命令如下:sudo docker run -d \ --name my_container \ --env "ENV01=value01" \ --env "ENV02=value02" \ my_image
也可以使用
--env-file
标志指定一个包含环境变量的文件来设置环境变量,示例命令如下:sudo docker run -d \ --name my_container \ --env-file ./envFile \ my_image
其中 envFile 文件的内容格式为每行一个变量,如
env01=value01
。
-
-
在 docker-compose.yml 文件中设置 :
-
可以使用
environment
属性直接设置环境变量,支持列表和映射语法,示例代码如下:services: web: image: nginx:latest environment: - ENV01=value01 - ENV02=value02
或者使用
env_file
属性指定环境变量文件,示例代码如下:services: web: image: nginx:latest env_file: - ./envFile
这样可以将环境变量与主配置文件分开,便于管理。
-
Docker 中的 .env
文件
-
创建
.env
文件 :在项目根目录下创建.env
文件,在文件中定义一系列键值对形式的环境变量,示例内容如下:DB_HOST=localhost DB_USER=root DB_PASSWORD=example TZ=Asia/Shanghai
-
在 docker-compose.yml 中引用
.env
文件 :在docker-compose.yml
文件中,可以通过${VARIABLE_NAME}
语法引用.env
文件中的变量,示例代码如下:version: '3' services: web: image: 'nginx:${NGINX_VERSION}' environment: - DB_HOST=${DB_HOST} - DB_USER=${DB_USER} - DB_PASSWORD=${DB_PASSWORD}
其中
NGINX_VERSION
、DB_HOST
、DB_USER
和DB_PASSWORD
都会在.env
文件中查找对应的值。 -
注意事项 :Docker Compose 会在启动容器时读取
.env
文件中的环境变量并应用到容器中,但如果容器已经存在,修改.env
文件后需要通过docker-compose down
命令停止并删除旧容器,再通过docker-compose up -d
命令重新创建容器才能使新的环境变量生效。或者也可以使用docker-compose up -d --force-recreate
命令强制重建容器。
通过以上方法,可以在生产环境中通过容器/Docker 设置环境变量,并且可以使用 .env
文件来管理环境变量,使项目配置更加灵活和安全。