gpt4 book ai didi

c# - 来自 .env 和/或 docker-compose 的环境变量未在 Dockerfile CMD 中替换

转载 作者:行者123 更新时间:2023-12-05 05:55:48 35 4
gpt4 key购买 nike

我正在尝试将几个环境变量从项目根目录中的 .env 文件传递​​到 Dockerfile 的 CMD。我已经阅读了 SO 上的许多其他类似问题,但没有任何效果。我做错了什么?

.env(在项目的根目录中)

TOKEN=AToken
DECK=ADeck

docker-compose.yml(在项目的根目录中)

version: "3"
services:
discord-initiative-savageworlds:
build:
context: .
environment:
- TOKEN=${TOKEN}
- DECK=${DECK}

和 Dockerfile(在项目的根目录中):

FROM ubuntu:latest
ARG TOKEN
ARG DECK
...Run Installers and Stuff...
COPY . .
RUN dotnet publish
RUN cd DiscordInitiative/bin/Debug/net5.0/publish
RUN echo "${TOKEN}"
CMD ./DiscordInitiative --token="${TOKEN}" --deck="${DECK}"

运行docker-compose up成功构建项目,但是CMD显示环境变量没有被替换:

Step 12/13 : RUN echo "${TOKEN}"
---> Running in 7096ef978516

Removing intermediate container 7096ef978516
---> 6985b62bb75e
Step 13/13 : CMD ./DiscordInitiative --token="${TOKEN}" --deck="${DECK}"

这是在 GitHub 上的项目和分支 here .

感谢任何提示!

最佳答案

docker-compose 文件中的 .env 文件和 environment 指令是在运行时应用的 Docker Compose 概念,不适用于镜像构建。您的配置会将这些环境变量注入(inject)到构建的、正在运行的容器中,但它不会通知构建环境。

(编辑:经过深思熟虑,这可能是您真正想要的。)

您可以通过更改 docker-compose 来充分利用 Dockerfile 中的 ARG 指令:

version: "3"
services:
discord-initiative-savageworlds:
build:
context: .
args:
- TOKEN=${TOKEN}
- DECK=${DECK}

这将在构建时有效地设置您的“环境”,并使您的 Dockerfile 能够像上面粘贴的那样运行。

编辑:

我怀疑 Dockerfile 的编辑部分中可能有一些东西可能会引发问题。我们的评论线程中的 TL;DR 是您的 Dockerfile 也需要更改:

FROM ubuntu:latest
...Run Installers and Stuff...
COPY . .
RUN dotnet publish
RUN cd DiscordInitiative/bin/Debug/net5.0/publish
ARG TOKEN
ARG DECK
RUN echo "${TOKEN}"
CMD ./DiscordInitiative --token="${TOKEN}" --deck="${DECK}"

将这些 ARG 指令移动到尽可能靠近底部的位置,将它们从您的 docker-compose.yml 一堆其他 RUN说明,以及类似的东西,有可能破坏中间容器状态。

编辑2:

但实际上,您所要求的是运行时容器中可用的变量(当 CMD 正在执行时)。因此,您的问题会让我相信您根本不需要 ARG,并且您的容器会按预期运行。

此外,如果您消除 ARG,您就可以摆脱 RUN echo ...,因为在构建过程的那个时候它永远不会返回任何东西.

注入(inject) ARG 完全不是您想要对敏感值执行的操作,因为参数随后会成为图像层的一部分,并受到窥探。在运行时向环境注入(inject)敏感值的模式是更受欢迎的(尽管我不会说最喜欢)。

关于c# - 来自 .env 和/或 docker-compose 的环境变量未在 Dockerfile CMD 中替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69350993/

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