У меня есть веб-приложение .netcore, которое отлично работает на моей машине. Я хочу запустить его в докер-контейнере.
Я пытаюсь установить переменную среды ASPNETCORE_ENVIRONMENT, но в коде, который ее читает, значение всегда равно нулю.
const string environmentVariableName = "ASPNETCORE_ENVIRONMENT";
var environmentName = Environment.GetEnvironmentVariable(environmentVariableName);
if (string.IsNullOrEmpty(environmentName))
{
//I'm only doing this is I can be certain that the environment variable isn't being retrieved
environmentName = "Error: UNABLE TO DETERMINE THE VALUE OF ASPNETCORE_ENVIRONMENT";
}
Я добавил различные версии файла докеров ниже, это моя текущая попытка. У меня есть аргумент со значением по умолчанию, который устанавливается как переменная среды:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
ARG ASPNETCORE_ENVIRONMENT="dev"
ENV ASPNETCORE_ENVIRONMENT=$ASPNETCORE_ENVIRONMENT
RUN echo $ASPNETCORE_ENVIRONMENT
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -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", "Zankre.dll"]
Я также попытался передать переменную с помощью команды ENTRYPOINT, как это делали некоторые другие вопросы о переполнении стека:
ENTRYPOINT ["dotnet", "Zankre.dll", "--environment=dev"]
Я также попытался передать аргументы как часть команды docker build и команды docker run. Я просто не могу получить переменную окружения, она всегда равна нулю.
Это команды сборки / запуска докера:
docker build -t zankre .
docker run -p 8080:80 zankre
Я использую переменную ASPNETCORE_ENVIRONMENT, чтобы задать используемый файл appsettings.xxx.json, где xxx - значение ASPNETCORE_ENVIRONMENT.
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.{environmentName}.json", false, true)
.Build();
При использовании ConfigurationBuilder над приложением происходит сбой, и контейнер закрывается. Я вижу ошибку, заключающуюся в том, что файл не существует, и сообщение «Ошибка: НЕВОЗМОЖНО ОПРЕДЕЛИТЬ ЗНАЧЕНИЕ ASPNETCORE_ENVIRONMENT», подтверждающее, что запрос переменной среды вернул значение null.
Если я сделаю файл appsettings необязательным, приложение будет работать в контейнере, я вижу домашнюю страницу, но умираю, когда пытается использовать одну из настроек из файла appsettings.
Я могу использовать контейнеры Linux только в Docker из-за моей версии Windows. Я не знаю, имеет ли это значение?
Судя по всему, что я прочитал, большинство попыток, которые я сделал, должны были сработать. Что я делаю неправильно?