【问题标题】:Problem with .env file setting for docker-compose.yml filedocker-compose.yml 文件的 .env 文件设置问题
【发布时间】:2021-04-06 23:13:38
【问题描述】:

我尝试在单独的 `PORTAL_ENVIRONMENT.env` 文件中的 `docker-compose.yml` 文件中设置变量
我不知道,我做错了什么。
我有这个输出:
WARNING: The POSTGRES_DB variable is not set. Defaulting to a blank string.
WARNING: The POSTGRES_USER variable is not set. Defaulting to a blank string.
WARNING: The POSTGRES_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The HOST variable is not set. Defaulting to a blank string.
WARNING: The PORT2 variable is not set. Defaulting to a blank string.
WARNING: The PORT3 variable is not set. Defaulting to a blank string.
WARNING: The PORT1 variable is not set. Defaulting to a blank string.

docker-compose.yml 看起来像这样:

  client_app:
    env_file:
      - PORTAL_ENVIRONMENT.env
    image: 'client:latest'
    build:
      context: ./
    container_name: client
    depends_on:
      - db
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/${POSTGRES_DB}
      - SPRING_DATASOURCE_USERNAME=${POSTGRES_USER}
      - SPRING_DATASOURCE_PASSWORD=${POSTGRES_PASSWORD}
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
      - HOST_NAME=${HOST}
      - CREDIT_POST=${PORT1}
      - PRODUCT_POST=${PORT3}
    ports:
      - ${PORT2}:8080

(有3个独立的模块,每个看起来都差不多)

PORTAL_ENVIRONMENT.env 看起来像这样:

HOST=localhost

PORT1=8089
PORT2=8090
PORT3=8091

POSTGRES_DB=create_credit
POSTGRES_USER=user
POSTGRES_PASSWORD=pass123

我运行它:

sudo docker-compose up --force-recreate --build

【问题讨论】:

    标签: docker docker-compose environment-variables


    【解决方案1】:

    在指定服务的环境时,您希望 docker-compose 在解析您的 docker-compose 文件时可以访问这些环境变量(HOST、POSTGRES_DB 等)。为此,您应该将它们放在一个名为 .env 的文件中。 (或者,如果它们是在您运行 docker-compose 时在您的 shell 环境中设置的,那也可以,但您可能希望将它们保存在 .env 文件中。)

    相反,您尝试在 docker-compose 文件中使用 env_file:。这指定使用env_file 的服务应查看该文件,然后使用该信息更新其自己的环境。 env_file 类似于 environment:,但它查看的是文件。只是给容器使用,docker-compose不能用它来设置容器的运行方式。

    如果您还想将变量从 .env 文件传递​​到容器中,您可以执行以下操作之一:

    environment:
     - MY_VARIABLE=${VARIABLE_IN_MY_ENV_FILE}
     - MY_VARIABLE_SAFER=${VARIABLE_IN_MY_ENV_FILE:?err}
    

    (如果没有设置环境变量,?err会导致启动失败,这是一个不错的技巧。)

    如果你想让 docker-compose 使用的 .env 文件不被命名为 .env(也许你出于某种原因喜欢你已经拥有的名字),docker-compose 也有自己的 --env-file 命令-line 选项,您可以使用它来指定要使用的.env 文件的路径。

    如果您仍然感到好奇或困惑,您还可以查看 docker-compose Environment Variables documentation page - 其中讨论了 docker-compose 和容器的环境设置,所有这些都在同一个网页中。

    【讨论】:

    • 这已经解决了我的问题,感谢您的完整解释! :)
    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多