.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可以讲究参数顺序。试试我提供的示例中的特定顺序。
我几乎尝试了所有可以在 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可以讲究参数顺序。试试我提供的示例中的特定顺序。