我无法设置在docker container中运行项目的ASPNETCORE_ENVIRONMENT变量.问题是这个值总是set/overwritten to "Development".

我已经try 过在我的Dockerfile中设置环境变量

ENV ASPNETCORE_ENVIRONMENT test

我还try 使用以下命令设置我的docker-compose文件中的环境变量

environment:
      - ASPNETCORE_ENVIRONMENT=test

当我将任何其他环境变量设置为it works时,例如:

environment:
      - OTHER_TEST_VARIABLE=test

我假设ASPNETCORE_ENVIRONMENT变量的值在某个地方被覆盖了,但我很难找到在哪里.

我已经将Docker支持添加到一个现有项目中,并通过Visual Studio的Docker/Docker compose选项直接运行该项目

该项目在Asp Net Core 2.1上运行

提前谢谢你

我的启动设置.json:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:53183/",
      "sslPort": 0
    }
  },
  "profiles": {

    "Docker": {
      "commandName": "Docker",
      "launchBrowser": true,
      "launchUrl": "{Scheme}://localhost:{ServicePort}/api/values"

    }

  }
}

我还try 将环境变量配置添加到LaunchSettings.json文件中

"Docker": {
          "commandName": "Docker",
          "launchBrowser": true,
          "launchUrl": "{Scheme}://localhost:{ServicePort}/api/values",
          "environmentVariables": {
           "ASPNETCORE_ENVIRONMENT": "test"
      }
        }

我的网站主持人:

 public static IWebHost BuildWebHost(string[] args)
        {
           return WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((builderContext,config) =>
                {
                    config.AddEnvironmentVariables();
                })
                .ConfigureLogging((hostingContext, logging) =>
                {
                    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                    logging.AddConsole();
                    logging.AddDebug();
                })
                .UseStartup<Startup>()
                .Build();

        }

我的docker .yml

version: '3.4'

services:
  api:
    image: ${DOCKER_REGISTRY}api
    build:
      context: .
      dockerfile: API/Dockerfile
    environment:
     - ASPNETCORE_ENVIRONMENT=test 

我的Dockerfile:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base

WORKDIR /app
EXPOSE 80
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY API/API.csproj API/
RUN dotnet restore API/API.csproj
COPY . .
WORKDIR /src/API
RUN dotnet build API.csproj -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .


ENTRYPOINT ["dotnet", "API.dll"]

以下是容器中环境变量的列表

C:\Users\Administrator>docker exec -ti d6 /bin/bash
root@d6f26d2ed2c3:/app# printenv
HOSTNAME=d6f26d2ed2c3
ASPNETCORE_URLS=http://+:80
test1=asdasd
test2=dasdasd
test3=dasdasd
PWD=/app
HOME=/root
NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages
DOTNET_USE_POLLING_FILE_WATCHER=1
ASPNETCORE_VERSION=2.1.3
DOTNET_RUNNING_IN_CONTAINER=true
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ASPNETCORE_ENVIRONMENT=Development
_=/usr/bin/printenv
root@d6f26d2ed2c3:/app#

推荐答案

它通过使用命令dotnet CoreDocker.dll --environment="X"配置ASPNETCORE_ENVIRONMENT对我有效

try 更改dockerfile,如下所示:

ENTRYPOINT ["dotnet", "CoreDocker.dll", "--environment=X"]

Asp.net相关问答推荐

如何在 ASP.​NET Core 中使用 jquery

当前http上下文的http动词

在 ASP.Net 中使用 Page_Load 和 Page_PreRender

Anti-Forgery Token 适用于不同的基于声明的用户

在 Asp.net 中通过 Button 的 CommandArgument 传递多个参数

如何以编程方式获取会话 cookie 名称?

无法从 App_code 文件夹中找到类型或命名空间

c# - 如何从列表中获取值的总和?

发布发布事件

部署后网站需要强制刷新

是否可以在 web.config 中添加响应 http 标头?

如何获取 ASP.NET 应用程序的完整虚拟路径

使用 Moq 验证活动注册

对 ASP.NET 2.0 网页进行单元测试的最佳方法是什么?

什么时候应该使用 Response.Redirect(url, true)?

解析器错误:此处不允许使用_Default,因为它没有扩展类System.Web.UI.Page和 MasterType 声明

为什么 Controls 集合不提供所有 IEnumerable 方法?

如何将代码中的变量调用到aspx页面

为什么 IFormFile 显示为空,我该如何解决?

如何使用 WebAPI 处理图像