如何在docker中设置dotnet core的环境?

时间:2019-02-27 09:03:04

标签: c# docker .net-core

我希望能够在不同的环境中(现在仅用于开发和生产)由docker运行dotnet core,但是我的docker总是在生产环境中启动。 这是我的docker文件:

FROM microsoft/dotnet:sdk AS build-env

WORKDIR /app

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

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

# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "test.dll"]

我有appsettings.Production.json和appsettings.Development.json 并且我已经在program.cs中配置了我的两个环境,如下所示:

 public static IWebHostBuilder CreateWebHostBuilder (string[] args) =>
            WebHost.CreateDefaultBuilder (args)

            .ConfigureAppConfiguration ((hostingContext, config) => {
                config.AddJsonFile ("appsettings.Development.json", optional : false, reloadOnChange : false)
                    .AddJsonFile ("appsettings.Production.json", optional : false, reloadOnChange : false);
            })
            //End of update
            .UseStartup<Startup> ();

我构建了docker映像和容器,但是当它启动时,它以生产模式启动,我希望它以开发模式启动

4 个答案:

答案 0 :(得分:4)

ENTRYPOINT ["dotnet", "test.dll", "--environment=Development"]

答案 1 :(得分:0)

ASP.NET Core会读取以下环境变量ASPNETCORE_ENVIRONMENT(如果未设置),则默认为production。您需要做的是在Dockerfile中使用它

ENV ASPNETCORE_ENVIRONMENT Development

或者如果您使用的是docker-compose.yml文件

environment:
  ASPNETCORE_ENVIRONMENT: Development

有关更多详细信息:

答案 2 :(得分:0)

如果在运行容器时未指定环境,则默认情况下将采用“生产”。

要运行另一个环境:

docker run -d -p 8000:80 –name something –env ASPNETCORE_ENVIRONMENT=Development myimage

答案 3 :(得分:0)

我遇到了同样的问题。我的项目里面有 3 个 appsettings.json(一个是通用的,两个用于开发和生产,比如 appsettings.development.json 和 appsettings.producation.json)。 我试过这些:

  1. 更不用说任何 docker 文件中的环境了,因为我不想坚持使用文件(和源代码控制),因为我应该有可能在不同的环境中运行相同的图像。我使用 --env ASPNETCORE_ENVIRONMENT=development 或 DOTNET_ENVIRONMENT=development 启动我的容器,但没有结果。
  2. 我在我的 dockerfile 中添加了 ENV ASPNETCORE_ENVIRONMENT 开发并且它可以工作。但这让我失去了第一个音符的触发条件。所以我删除了它。
  3. 我只用 --env Environment=development 启动我的容器,它以某种方式工作!奇迹!实际上我仍然不知道它为什么有效。 “环境”是 docker 的内置变量吗?它与 ASPNETCORE_ENVIRONMENT 有何关系?还是 ASPNETCORE_ENVIRONMENT(和 DOTNET_ENVIRONMENT)变量最终会挖掘到 ENVIRONMENT 变量?