gpt4 book ai didi

docker - 无法在 Docker 容器中获取 ASPNETCORE_ENVIRONMENT 变量

转载 作者:行者123 更新时间:2023-12-03 08:28:09 24 4
gpt4 key购买 nike

我有一个 .netcore Web 应用程序,可以在我的计算机上正常运行。我想让它在 Docker 容器中运行。

我正在尝试设置 ASPNETCORE_ENVIRONMENT 环境变量,但在读取此变量的代码中,该值始终为 null。

const string environmentVariableName = "ASPNETCORE_ENVIRONMENT";
var environmentName = Environment.GetEnvironmentVariable(environmentVariableName);

if (string.IsNullOrEmpty(environmentName))
{
//I'm only doing this is I can be certain that the environment variable isn't being retrieved
environmentName = "Error: UNABLE TO DETERMINE THE VALUE OF ASPNETCORE_ENVIRONMENT";
}

我在下面添加了各种版本的 dockerfile,这是我当前的尝试。我有一个默认参数被设置为环境变量:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

ARG ASPNETCORE_ENVIRONMENT="dev"
ENV ASPNETCORE_ENVIRONMENT=$ASPNETCORE_ENVIRONMENT

RUN echo $ASPNETCORE_ENVIRONMENT

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "Zankre.dll"]

我还尝试通过 ENTRYPOINT 命令传递变量,就像其他一些堆栈溢出问题所做的那样:

ENTRYPOINT ["dotnet", "Zankre.dll", "--environment=dev"]

我还尝试将参数作为 docker build 命令和 docker run 命令的一部分传递。我似乎根本无法获取环境变量,它始终为空。

这些是 docker 构建/运行命令:

docker build -t zankre .
docker run -p 8080:80 zankre

我使用 ASPNETCORE_ENVIRONMENT 变量来设置要使用的 appsettings.xxx.json 文件,其中 xxx 是 ASPNETCORE_ENVIRONMENT 值。

var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.{environmentName}.json", false, true)
.Build();

使用上面的 ConfigurationBuilder 应用程序失败并且容器退出。我可以看到文件不存在的错误以及消息“Error: UNABLE TO DETERMINE THE VALUE OF ASPNETCORE_ENVIRONMENT”,确认对环境变量的请求返回 null。

如果我将 appsettings 文件设为可选,应用程序将在容器中运行,我可以看到主页,但当它尝试使用 appsettings 文件中的其中一项设置时就会死掉。

由于我的 Windows 版本,我只能在 Docker 中使用 Linux 容器。不知道这有什么区别吗?

从我读过的所有内容来看,我所做的大部分尝试都应该是有效的。我做错了什么?

最佳答案

经过大量的试验和错误,我意识到我没有正确地形成我的 docker run 命令 - 我也找不到任何关于此的文档,但你需要在容器标签之前有变量,例如

在下面的行中,ASPNETCORE_ENVIRONMENT 没有被使用

docker run -p 8080:80 zankre -e "ASPNETCORE_ENVIRONMENT=Development"

变量必须在容器标签之前指定。下面的工作如我所料

docker run -e "ASPNETCORE_ENVIRONMENT=Development" -p 8080:80 zankre

关于docker - 无法在 Docker 容器中获取 ASPNETCORE_ENVIRONMENT 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66006143/

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