gpt4 book ai didi

docker - 如何在 Visual Studio Code docker 容器内运行的 .devcontainer 使用的 env 文件中引用另一个环境变量?

转载 作者:行者123 更新时间:2023-12-02 17:48:10 24 4
gpt4 key购买 nike

概括

我正在使用 Visual Studio Code 运行 docker 容器并将我的环境变量作为文件传递。

问题

我正在尝试从其他环境变量动态格式化字符串,但在解析字符串时遇到问题。

我能够构建容器并且调试终端选项卡显示没有问题。

我目前没有使用 docker-compose.yml ,而是使用 Visual Studio .devcontainer 设置。

代码

开发容器.json

...

"runArgs": [
"--env-file", "${localWorkspaceFolder}/.env.dev"
,

...

.env.dev
DATABASE_DATABASE=database
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_DRIVER=postgresql
CONNECTION_STRING=${DATABASE_DRIVER}://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DATABASE}

输出

当我在 bash 中输入 env 时,它显示:
DATABASE_DATABASE=database
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_DRIVER=postgresql
CONNECTION_STRING=${DATABASE_DRIVER}://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DATABASE}

我希望它显示的地方:
DATABASE_DATABASE=database
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_DRIVER=postgresql
CONNECTION_STRING=postgresql://user:password@$localhost:5432/database

问题
${VARIABLE_NAME} 不是正确的语法吗?

最佳答案

从文件设置 env 变量的工作方式与在终端中设置它们的工作方式不同。
每行只是一个在“=”上拆分的字符串,该拆分的右侧被分配为值,左侧被分配为键。
如果查看运行命令的源代码:
https://github.com/docker/cli/blob/master/cli/command/container/run.go
你会看到环境变量不是通过 bash 命令设置的。这只是一系列字符串分配。
env 文件几乎总是如此。它们是字符串,并且是这样设置的。您尝试使用的语法仅适用于努力将 env 文件作为一系列 bash 命令运行的平台,但 docker 不会这样做。这与 VS 代码无关,这只是 env 文件通常的工作方式。
一种可能的解决方法是将此分配从您的 env 文件移动到您的 Dockerfile 或 docker-compose。这些指令作为 bash 命令运行,因此您的变量调用将起作用。
例子
Dockerfile

ENV FIRST=ONE
ENV SECOND=${FIRST}
在这里,在您的容器内 echo ${SECOND} 将打印出 ONE。
docker-compose
Docker compose 环境变量的工作方式略有不同。它不会按顺序设置撰写文件中的变量,因此引用您在同一服务定义中设置的变量不起作用。但是,如果您的变量设置在与撰写文件相同的目录中的 .env 文件中,那么您可以通过执行以下操作来访问这些值:
services:
myapp:
environment:
- VAR_IN_MY_CONTAINER=${VAR_ON_MY_HOST}
发生此行为是因为 compose 将其目录中的任何 .env 文件视为主机环境的一部分。

关于docker - 如何在 Visual Studio Code docker 容器内运行的 .devcontainer 使用的 env 文件中引用另一个环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com