Укажите переменную среды в dockerfile для основного приложения. net - PullRequest
0 голосов
/ 06 марта 2020

У меня есть приложение. net core 3.1, которое развернуто на aws ecs в виде docker контейнера. Теперь я хочу указать переменную окружения в моем 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();

Теперь я хочу заменить environment.EnvironmentName на значение, указанное в Dockerfile, но оно не работает. Также я где-то читал, что я могу указать переменную окружения при выполнении команды 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"]

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Я думаю, что лучше указывать переменную ASPNETCORE_ENVIRONMENT в переменных среды определения задачи, а не в самом Dockerfile. Это позволит вам изменить ASPNETCORE_ENVIRONMENT в зависимости от того, в какую среду вы развертываете (например, test / prod et c).

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/

0 голосов
/ 06 марта 2020

Вы должны указать переменную среды в конечном изображении

# 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"]
...