如何从 .env 文件获取环境变量到 docker-compose.yml?

Sut*_*ala 4 environment-variables docker docker-compose

我有一个.env文件和一个 docker-compose 文件。我使用env_filedocker-compose 上的属性引用了 env 文件。然后我使用变量插值来使用 .env 文件中定义的变量设置另一个环境变量。出于某种原因,Docker 无法识别 .env 文件中定义的变量。

app.env :

MYSQL_DATABASE=wordpress
DB_USER=root
MYSQL_ROOT_PASSWORD=example
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '3.1'
services:
  wordpress:
    container_name: 'wp'
    build: .
    restart: unless-stopped
    links:
      - mysql
    env_file:
      - app.env
    environment:
      - WORDPRESS_DB_USER=${DB_USER}
      - WORDPRESS_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - WORDPRESS_DB_NAME=${MYSQL_DATABASE}
    ports:
      - 80:80
Run Code Online (Sandbox Code Playgroud)

Nic*_*lay 5

看来您混淆了env_file配置选项的含义。它将多个环境变量从外部文件传递到服务的容器。它与 相同environment,但它们是从文件加载的。

如果你想docker compose识别.env文件中定义的变量,它应该是.env文件。

为了实现你想要的,你需要:

1.重命名app.env.env

mv app.env .env
Run Code Online (Sandbox Code Playgroud)

2.删除env_file配置选项docker-compose.yaml

version: '3.1'
services:
  wordpress:
    container_name: 'wp'
    build: .
    restart: unless-stopped
    links:
      - mysql
    environment:
      - WORDPRESS_DB_USER=${DB_USER}
      - WORDPRESS_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - WORDPRESS_DB_NAME=${MYSQL_DATABASE}
    ports:
      - 80:80
Run Code Online (Sandbox Code Playgroud)