.NET 5.0 应用程序未从 docker 运行 获取环境变量

.NET 5.0 application not getting environment variables from docker run

我几乎尝试了所有可以在 Internet 上找到的解决方案,但没有任何效果。

在我的 .Net 5.0 应用程序中,我尝试使用环境变量和 'docker run' 命令覆盖 appsettings.json 文件中 'IP' 和 'Port' 的值Linux.

这是我的 appsettings.json 文件:

{
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "Default": "Information",
            "System": "Information",
            "Microsoft": "Information"
        }
    },
    "IPSettings": {
        "IP": "192.168.230.131",
        "Port": "10080"
    }
}

这是我的 Dockerfile(我也尝试过不使用 'ENV' 行):

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
ENV IPSettings__IP='192.168.230.131'
ENV IPSettings__Port='10080'

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["HostServer.csproj", "."]
COPY ["QuicktronWrapper/QuicktronWrapper.csproj", "QuicktronWrapper/"]
RUN dotnet restore "./HostServer.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "HostServer.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "HostServer.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "HostServer.dll"]

我在配置中也添加了环境变量,如下所示:

    var builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                    .AddEnvironmentVariables();

    IConfigurationRoot configuration = builder.Build();

我当然能够从 appsettings.json 获取这些值,因为我可以 运行 通过在 IIS 上从 Visual Studio 启动应用程序而不会在 Windows 上出现问题.

现在,当我尝试在 Linux 和 运行 上构建 docker 图像时,我在 'docker run' 命令中提供的值没有被传递到我的申请。

以下是我使用的命令的变体,但 none 似乎有效:

docker run -it -p 4000:9999 --name HostServer hostserver \
-e "IPSettings:IP"="192.168.247.131" \
-e "IPSettings:Port"="10080"


docker run -e ASPNETCORE_IPSettings__IP="192.168.247.131" \
-e ASPNETCORE_IPSettings__Port="10080" \
-it -p 4000:9999 --name HostServer hostserver


docker run -e IPSettings__IP="192.168.247.131" \
-e IPSettings__Port="10080" \
-it -p 4000:9999 --name HostServer hostserver

几天来我一直在努力解决这个问题。我在这里错过了什么?

此外,如果我将 apsettings.json 中的值替换为我需要的值,然后使用以下命令:

docker run -it -p 4000:9999 --name HostServer hostserver

运行完全符合 Linux,这意味着问题肯定出在我传递环境变量的方式上。

看起来不错。

形式的东西:

docker run -it -e IPSettings__IP="192.168.247.131" --entrypoint /bin/bash --name HostServer hostserver

应该可以工作 - 至少,我的终端机上有等效项。

Docker可以讲究参数顺序。试试我提供的示例中的特定顺序。