Docker & docker-compose设置环境变量

dpiehjr4  于 2023-11-17  发布在  Docker
关注(0)|答案(3)|浏览(176)

以下是docker-compose.yml文件的典型结构:

version: "3.7"
services:
    serv1:
        build: ./serv1
        ports:
            - 4040:40
        env_file:
            - ./docker.env
    serv2:
        build: ./serv2
        ports:
            - 3000:3000
        env_file:
            - ./docker.env
    serv3:
        build: ./serv3
        ports:
            - 5000:5000
        env_file:
            - ./docker.env

字符串
我在一个docker.env文件中设置了一些env变量,我想使用它,我有两个问题:
1.尝试使用主机上的端口,所以

serv1:
   ports:
      - "${SERV1_PORT}:40"
   env_file:
      - ./docker.env
...

serv2:
   ports:
      - "${SERV2_PORT}:40"
   env_file:
      - ./docker.env


但当我构建时,我得到了以下结果:

WARN[0000] The "SERV1_PORT" variable is not set. Defaulting to a blank string.


1.除了在每个服务上包含env_file:,是否有一种方法可以通过只包含一次来在我的docker-compose上指定“全局”env文件?意思是这样的:

services:
  serv1: ...
  serv2: ...
  ...
env_file:
   - ./docker.env # these variables to be accessible in all

ehxuflar

ehxuflar1#

env_file设置的环境变量 * 在容器中 * 可用,而不是在docker-compose.yml中。为此,您需要.env文件;阅读更多关于Environment variables in docker compose的信息。

替换Compose文件中的环境变量

可以在shell中使用环境变量来填充Compose文件中的值:

web:
   image: "webapp:${TAG}"

字符串
如果有多个环境变量,可以将它们添加到名为.env的默认环境变量文件中,或者使用--env-file命令行选项提供环境变量文件的路径来替换它们。

zbwhf8kr

zbwhf8kr2#

在前面的有效答案之上,您还可以发出docker compose config命令来查看任何ENV是如何根据您的意愿被替换(或未被替换)的。

b1payxdu

b1payxdu3#

除了正确的答案,我强烈建议你在docker compose堆栈中加入“合理的”默认值。这将允许你的团队和其他开发人员加快堆栈的开发速度,同时也为他们提供定制的机会。
这可以像这样完成:

environment:
      NODE_ENV: ${NODE_ENV:-development}

字符串

相关问题