在 Docker Compose 中,可以通过以下方式使用环境变量文件来配置服务的环境变量:
创建一个 .env 文件,用于存储环境变量。例如:
MY_VARIABLE=value ANOTHER_VARIABLE=another_value
也可以创建多个环境变量文件,例如 .env.development、.env.production 等,用于不同的环境。
在 docker-compose.yml 文件中,可以使用 env_file 关键字来引用环境变量文件。例如:
version: '3' services: # 定义mysql服务 mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: 12345678 MYSQL_DATABASE: demo_db volumes: - /var/data/mysql:/var/lib/mysql networks: - mynetwork # 定义nginx服务 nginx: image: nginx:latest ports: - "8080:80" depends_on: - mysql # 加载环境变量文件 env_file: - .env volumes: - /var/data/nginx_config:/etc/nginx/conf.d - myvolume:/usr/share/nginx/html networks: - mynetwork networks: mynetwork: driver: bridge volumes: myvolume:
上面例子中,nginx 服务将从 .env 文件中读取环境变量。
启动服务:
root@hxstrive:~# cat .env MY_VARIABLE=value ANOTHER_VARIABLE=another_value root@hxstrive:~# docker-compose up -d Creating network "root_mynetwork" with driver "bridge" Creating root_mysql_1 ... done Creating root_nginx_1 ... done root@hxstrive:~# docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------------- root_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp root_nginx_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8080->80/tcp,:::8080->80/tcp
当然,我们也可以指定多个环境变量文件,它们将按照顺序读取,后面的文件中的变量会覆盖前面文件中的同名变量。例如:
version: '3' services: # 定义服务 myservice: image: myimage env_file: - .env.common - .env.development
上面示例将先读取 .env.common 文件,然后读取 .env.development 文件,后者中的变量会覆盖前者中的同名变量。
(1)环境变量文件中的变量名和值之间用等号(=)连接,没有空格。
(2)环境变量文件中的注释可以使用 # 开头。
(3)确保环境变量文件的路径是相对于 docker-compose.yml 文件的位置。
(4)如果环境变量文件中的变量名与服务定义中的其他配置冲突,可能会导致意外的结果。在这种情况下,需要仔细检查变量的使用和优先级。