Docker Compose环境变量空白字符串
我试图让Docker Compose中的环境变量正常工作。我的文件: env/test.env: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
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 它在