Docker Compose环境变量空白字符串

Docker Compose环境变量空白字符串,docker,docker-compose,environment-variables,Docker,Docker Compose,Environment Variables,我试图让Docker Compose中的环境变量正常工作。我的文件: env/test.env: XUSER=you XHOME=/home/${XUSER} docker-compose.yml: version: '3' services: abc: build: . image: xyz:latest container_name: xyz env_file: - env/test.en

我试图让Docker Compose中的环境变量正常工作。我的文件:

env/test.env:

XUSER=you
XHOME=/home/${XUSER}
docker-compose.yml:

version: '3'
    services:
     abc:
        build: .
        image: xyz:latest
        container_name: xyz
        env_file:
          - env/test.env
        user: "${XUSER}"
docker compose up-build

docker编写配置

WARNING: The XUSER variable is not set. Defaulting to a blank string.
    services:
      qernel:
        build:
          context: xyz
        container_name: xyz
        environment:
          XHOME: /home/you
          XUSER: you
        image: xyz:latest
        user: ''
如您所见,user:是一个空字符串,但env_文件可以工作。我发现了一些关于这个问题的旧错误报告,我不确定我是否做错了什么。

它说警告:没有设置XUSER变量。默认为空字符串。因为${XUSER}在执行此操作时不存在:

用户:${XUSER} ${XUSER}不在您的环境中。您可以通过运行:env | grep XUSER来验证这一点,它应该不会输出任何内容,并且docker compose在相同级别上没有找到任何.env文件,或者在运行docker compose up-build或docker compose config时没有传递任何.env文件

WARNING: The XUSER variable is not set. Defaulting to a blank string.
    services:
      qernel:
        build:
          context: xyz
        container_name: xyz
        environment:
          XHOME: /home/you
          XUSER: you
        image: xyz:latest
        user: ''
灵活的解决方案: 将env/test.env重命名为.env,并将其放置在docker compose文件的文件夹容器的根目录中,以便docker自动解析它

或使用:

docker compose-env文件路径/to/env/test.env-up-build docker compose-env文件路径/to/env/test.env配置 永久解决办法: 通过运行以下命令在您的环境中手动导出它们:

export-XUSER=you&&export-XHOME=/home/${XUSER} 或者使用env/test.env文件作为源注释,需要在其前面加上“export”前缀:

env/test.env:

XUSER=you
XHOME=/home/${XUSER}
导出XUSER=you 导出XHOME=/home/${XUSER} 然后是你的跑步/path/to/env/test.env或source/path/to/env/test.env

它表示警告:未设置XUSER变量。默认为空字符串。因为${XUSER}在执行此操作时不存在:

用户:${XUSER} ${XUSER}不在您的环境中。您可以通过运行:env | grep XUSER来验证这一点,它应该不会输出任何内容,并且docker compose在相同级别上没有找到任何.env文件,或者在运行docker compose up-build或docker compose config时没有传递任何.env文件

WARNING: The XUSER variable is not set. Defaulting to a blank string.
    services:
      qernel:
        build:
          context: xyz
        container_name: xyz
        environment:
          XHOME: /home/you
          XUSER: you
        image: xyz:latest
        user: ''
灵活的解决方案: 将env/test.env重命名为.env,并将其放置在docker compose文件的文件夹容器的根目录中,以便docker自动解析它

或使用:

docker compose-env文件路径/to/env/test.env-up-build docker compose-env文件路径/to/env/test.env配置 永久解决办法: 通过运行以下命令在您的环境中手动导出它们:

export-XUSER=you&&export-XHOME=/home/${XUSER} 或者使用env/test.env文件作为源注释,需要在其前面加上“export”前缀:

env/test.env:

XUSER=you
XHOME=/home/${XUSER}
导出XUSER=you 导出XHOME=/home/${XUSER}
然后是你的跑步/path/to/env/test.env或source/path/to/env/test.env

您需要做的是在docker-compose.yml文件所在的目录下创建.env文件,.env的内容是:

然后运行docker compose配置

WARNING: The XUSER variable is not set. Defaulting to a blank string.
    services:
      qernel:
        build:
          context: xyz
        container_name: xyz
        environment:
          XHOME: /home/you
          XUSER: you
        image: xyz:latest
        user: ''

参考:

您需要做的是在docker-compose.yml文件所在的目录下创建.env文件。env的内容是:

然后运行docker compose配置

WARNING: The XUSER variable is not set. Defaulting to a blank string.
    services:
      qernel:
        build:
          context: xyz
        container_name: xyz
        environment:
          XHOME: /home/you
          XUSER: you
        image: xyz:latest
        user: ''

参考资料:

尽管其他答案都是正确的,但它们并没有充分强调潜在的误解:

使用该选项,您可以指定一个包含要注入容器中环境的变量的文件

在docker-compose.yml中使用,您可以访问docker-compose命令环境中的变量,即主机上的变量。 您可以使用OS/shell的常用机制设置它们,例如在bash中:

导出XUSER=you 码头工人整理 此外,通过docker compose,您可以在当前目录中使用

因此,在您的具体示例中,您应该将env/test.env移动到.env,将变量添加到docker compose的环境中,以进行变量替换。 如果还希望将它们添加到容器中的环境中,可以按如下方式执行:

版本:“3” 服务: abc: 生成:。 图片:xyz:最新 容器名称:xyz 将docker compose环境中的变量添加到容器: 环境: -XUSER=$XUSER 甚至更短: -克霍姆 在配置中使用docker compose环境中的变量: 用户:${XUSER}
尽管其他答案都是正确的,但它们并没有充分强调潜在的误解:

使用该选项,您可以指定一个包含要注入容器中环境的变量的文件

在docker-compose.yml中使用,您可以访问docker-compose命令环境中的变量,即主机上的变量。 您可以使用OS/shell的常用机制设置它们,例如在bash中:

导出XUSER=you 码头工人整理 此外,通过docker compose,您可以在当前目录中使用

因此,在您的具体示例中,您应该将env/test.env移动到.env,将变量添加到docker compose的环境中,以进行变量替换。 如果还希望将它们添加到容器中的环境中,可以按如下方式执行:

版本:“3” 服务: abc: 生成:。 图片:x yz:最新的 容器名称:xyz 将docker compose环境中的变量添加到容器: 环境: -XUSER=$XUSER 甚至更短: -克霍姆 在配置中使用docker compose环境中的变量: 用户:${XUSER} 因为+1.28.env文件位于项目根目录中,而不是执行docker compose的位置。如果这样做,变量将自动拉入容器中

这在dev中非常有效,尤其是使用绑定装载卷,可以在项目根目录中编写.env,而无需通过在.dockrignore中包含.env来构建映像

但在生产中,我不喜欢将其包含在我的项目根目录中,特别是因为我从github中向下拉这些项目文件。撰写文件希望它们位于生产环境中,以替换为替换SECRET\u VAR=${SECRET\u VAR}

因此,一个黑客解决方案是将.env文件放在我的生产目录树的较高位置,远离我的项目理想情况下,这些文件将来自托管服务上的环境存储或另一个加密存储,但在运行时使用Compose up中的-env_file标志将这些变量注入容器

env_file标志的工作原理如下: docker compose-f docker-compose.prod.yml-env file../.env up-d

因为+1.28.env文件放在项目根目录中,而不是执行docker compose的位置,所以它在中。如果这样做,变量将自动拉入容器中

这在dev中非常有效,尤其是使用绑定装载卷,可以在项目根目录中编写.env,而无需通过在.dockrignore中包含.env来构建映像

但在生产中,我不喜欢将其包含在我的项目根目录中,特别是因为我从github中向下拉这些项目文件。撰写文件希望它们位于生产环境中,以替换为替换SECRET\u VAR=${SECRET\u VAR}

因此,一个黑客解决方案是将.env文件放在我的生产目录树的较高位置,远离我的项目理想情况下,这些文件将来自托管服务上的环境存储或另一个加密存储,但在运行时使用Compose up中的-env_file标志将这些变量注入容器

env_file标志的工作原理如下: docker compose-f docker-compose.prod.yml-env file../.env up-d

它在