ASPNETCORE_ENVIRONMENT в Докере - программирование
Подтвердить что ты не робот

ASPNETCORE_ENVIRONMENT в Докере

У меня проблемы с настройкой переменной ASPNETCORE_ENVIRONMENT, выполняющей мой проект в контейнере докеров. Проблема в том, что значение всегда устанавливается/перезаписывается в "Development".

Я попытался установить переменную окружения в моем Dockerfile, используя

ENV ASPNETCORE_ENVIRONMENT test

также попытался установить переменную окружения в моем файле - файле -докере, используя

environment:
      - ASPNETCORE_ENVIRONMENT=test

Когда я устанавливаю любую другую переменную среды, она работает, например:

environment:
      - OTHER_TEST_VARIABLE=test

Я предполагаю, что значение переменной ASPNETCORE_ENVIRONMENT перезаписывается где-то, но мне трудно узнать, где.

Я добавил поддержку Docker к существующему проекту и выполняю проект напрямую с помощью Visual Studio Docker/Docker compose option

Проект работает на Asp Net Core 2.1

заранее спасибо

Мой launchSettings.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"

    }

  }
}

Я также попытался добавить конфигурацию переменной окружения в 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-compose.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
[email protected]:/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
[email protected]:/app#
4b9b3361

Ответ 1

Он работает для меня, настраивая ASPNETCORE_ENVIRONMENT с помощью команды dotnet CoreDocker.dll --environment="X"

Попробуйте изменить dockerfile как dockerfile ниже:

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

Ответ 2

В файле docker-compose.override.yml вы должны найти что-то вроде этого:

version: '3.4'

services:
  webapplication1:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development # <==

Ответ 3

Спасибо за ваши комментарии, я решил свою проблему. Это была моя ошибка.

Моя проблема заключалась в том, что когда я добавил Docker-Support в свой проект, у меня уже был Dockerfile, включенный в проект.

Когда VS сгенерировал файлы для поддержки Docker, появился второй файл Dockerfile, и один из Dockerfiles был переименован в "Dockerfile.original".

Я использовал "Dockerfile", видимый в проводнике решений (который каким-то образом был сопоставлен с файлом "Dockerfile.original" в файловой системе)

Кажется, что в фоновом режиме мои изменения, написанные на "Dockerfile.original", но этот файл не использовался, пока выполнялась работа docker-compose. Он использовал пустой сгенерированный файл Docker, который не был виден в проводнике решений.

Ответ 4

Инструменты Visual Studio для работы с докером

Если вы используете интеграцию Docker для Visual Studio (контейнер отладки из VS), вам нужно обратить особое внимание на настройки по умолчанию.

Переменные среды по умолчанию

Когда инструмент запускает отладчик с помощью команды docker run [..], он предоставляет аргумент -e "ASPNETCORE_ENVIRONMENT=Development". Вы можете перезаписать эту переменную среды в Properties/launchSettings.json.

Несмотря на то, что я не вижу этого в введенной команде, при тестировании я также испытал другую переменную по умолчанию ASPNETCORE_URLS=http://+:80.

Хорошей отправной точкой для чтения о VS Docker Tooling является это сообщение в блоге и официальная документация.

Общий хост .Net-Core 3.0

Когда вы используете универсальный хост в .Net-Core 3.0, вы можете столкнуться с проблемами при использовании новой универсальной переменной DOTNET_ENVIRONMENT, поскольку тогда у вас будет две указанные среды. Это может быть трудно отладить. Итак, что мне нравится делать, так это сначала сбросить все настройки по умолчанию и начать все заново с моего Properties/launchSettings.json:

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "Docker": {
      "commandName": "Docker",
      "environmentVariables": {
        // Overwrite default VS Docker Tools environment variables first (ASPNETCORE_ENVIRONMENT=Development; ASPNETCORE_URLS=http://+:80)
        // https://www.paraesthesia.com/archive/2019/06/18/tips-on-container-tools-for-visual-studio/
        "ASPNETCORE_ENVIRONMENT": "",
        "ASPNETCORE_URLS": "",
        "DOTNET_ENVIRONMENT": "Production",
        "DOTNET_URLS": "http://+:80"
      }
    }
  }
}