Docker Compose 配置环境变量文件

在 Docker Compose 中,可以通过以下方式使用环境变量文件来配置服务的环境变量:

创建环境变量文件

创建一个 .env 文件,用于存储环境变量。例如:

MY_VARIABLE=value
ANOTHER_VARIABLE=another_value

也可以创建多个环境变量文件,例如 .env.development、.env.production 等,用于不同的环境。

在docker-compose.yml中引用环境变量文件

在 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)如果环境变量文件中的变量名与服务定义中的其他配置冲突,可能会导致意外的结果。在这种情况下,需要仔细检查变量的使用和优先级。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号