【问题标题】:Specify environment variable in dockerfile for .net core application在 .net 核心应用程序的 dockerfile 中指定环境变量
【发布时间】:2021-06-03 20:15:02
【问题描述】:

我有一个 .net core 3.1 应用程序,我作为 docker 容器部署在 aws ecs 上。现在我想在我试图在我的代码中使用的 dockerfile 中指定环境变量,但每次我都没有得到任何价值。

这是 .net 核心:

        private IWebHostEnvironment Environment { get; set; }
        public IConfiguration Configuration { get; set; }


        public void ConfigureServices(IServiceCollection services)
        {
          var builder = new ConfigurationBuilder()
           .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
           .AddJsonFile($"appsettings.{Environment.EnvironmentName}.json", optional: true)
           .AddEnvironmentVariables();

现在我想用我在 Dockerfile 中指定的值替换 environment.EnvironmentName 但它不起作用。 另外我在某处读到我可以在执行 docker-run 命令时指定环境变量,但在我的情况下我不能这样做,因为 aws ecs 正在运行 docker 容器

这里是 docker 文件:

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

# Copy everything else and build
COPY . ./
ENV ASPNETCORE_ENVIRONMENT Development

RUN dotnet restore Isofy-Api/*.csproj
RUN dotnet publish Isofy-Api/*.csproj -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", "Isofy-Api.dll"]

我做错了什么?

【问题讨论】:

标签: docker asp.net-core amazon-ecs aws-ecr


【解决方案1】:

您应该在最终图像中指定环境变量

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

【讨论】:

    【解决方案2】:

    我认为最好在任务定义环境变量上指定 ASPNETCORE_ENVIRONMENT 变量而不是 Dockerfile 本身。这将允许您根据要部署到的环境(例如测试/产品等)更改 ASPNETCORE_ENVIRONMENT。

    https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-environment

    如果您想通过 docker-compose 在本地运行它,请在 docker-compose 内的服务定义中添加环境变量。

    https://docs.docker.com/compose/environment-variables/

    【讨论】:

      【解决方案3】:

      比起在我的 docker 或 env 文件中包含环境变量,我更喜欢为每个环境使用单独的 aws-ecs-tools-defaults.json,并使用命令行发布:

      dotnet ecs deploy-scheduled-task  --cfg aws-ecs-tools-defaults.json --container-environment-variables EnvironmentVariableName1=test1;EnvironmentVariableName1=test1
      

      如果您还没有安装 dotnet ecs,您可以通过以下方式安装:

      dotnet tool install --global Amazon.ECS.Tools
      

      【讨论】:

        猜你喜欢
        • 2021-02-09
        • 1970-01-01
        • 2019-05-24
        • 2017-12-14
        • 2022-10-15
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多