Имам .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 -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, потвърждаващо заявката за променливата на средата върна нула.
Ако направя файла с appsettings незадължителен, приложението работи в контейнера, мога да видя началната страница, но умира, когато се опита да използва една от настройките от файла с appsettings.
Мога да използвам само Linux контейнери в Docker поради моята версия на Windows. Не знам дали има някаква разлика?
От цялото четене, което направих, повечето от опитите, които направих, трябваше да са успели. какво правя грешно