ASPNETCORE_URLS не применяется (развертывание в контейнере docker) - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь, чтобы мое основное приложение asp. net использовало ASPNETCORE_URLS для установки URL-адреса запуска. Он работает не так, как ожидалось.

Я перепробовал все, что нашел в Интернете, но застрял. Приложение работает без переменных среды и отлично работает в контейнере docker. Но не работает при включении переменных среды.

Желаемый результат: 0.0.0.0:5000 Результат: localhost: 5000

Запуск:

        public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = new ConfigurationBuilder()
             .SetBasePath(env.ContentRootPath)
          .AddJsonFile("appsettings.json")
          .AddJsonFile($"appsettings.{env.EnvironmentName}.json")
          .AddEnvironmentVariables()
          .Build();
    }

Переменная Env в файле dockerfile:

ENV ASPNETCORE_URLS=http://+5000

Docker Файл:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses 

this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://+5000

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Platform/Platform.API/Platform.API.csproj", "Platform.API/"]
COPY ["Platform/Platform.Domain/Platform.Domain.csproj", "Platform.Domain/"]
COPY ["Platform/Platform.DataAccess/Platform.DataAccess.csproj", "Platform.DataAccess/"]
RUN dotnet restore "Platform.API/Platform.API.csproj"
COPY ./Platform .
WORKDIR "/src/Platform.API"
RUN dotnet build "Platform.API.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Platform.API.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Platform.API.dll"]

Переменная окружения обнаружена приложением, просто по какой-то причине она не будет использоваться.

Заранее спасибо!

1 Ответ

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

это распространенное неправильное представление о ключевом слове ENV в DOCKERFILE. Переместите его в изображение приложения, чтобы получить эффект

FROM base AS final
WORKDIR /app
ENV ASPNETCORE_URLS=http://+5000
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Platform.API.dll"]

. Ключевое слово ENV применяется к текущему этапу сборки в соответствии с ссылка на файл Docker

Инструкция ENV устанавливает значение переменной среды. Это значение будет присутствовать в среде для всех последующих инструкций на этапе сборки и может быть заменено во многих других.

FROM однако начинается новый этап сборки

Инструкция FROM инициализирует новый этап сборки и устанавливает базовый образ для последующих инструкций. Таким образом, действительный Dockerfile должен начинаться с инструкции FROM.

Вы можете попробовать это, построив это DOCKERFILE

from alpine
ENV asdf test
RUN echo $asdf

from alpine
RUN echo $asdf

, возвращает

$ docker build -t envtest .
Sending build context to Docker daemon  6.656kB
Step 1/5 : from alpine
 ---> 5cb3aa00f899
Step 2/5 : ENV asdf test
 ---> Running in 91ae4904857e
Removing intermediate container 91ae4904857e
 ---> 63ef857d07a6
Step 3/5 : RUN echo $asdf       <------ works in same build stage
 ---> Running in b9037c76cc93
test
Removing intermediate container b9037c76cc93
 ---> 17edf57d8055
Step 4/5 : from alpine
 ---> 5cb3aa00f899
Step 5/5 : RUN echo $asdf       <------- does not in next build stage
 ---> Running in 62b42e7c28d8

Removing intermediate container 62b42e7c28d8
 ---> 7e6a8a58442f
Successfully built 7e6a8a58442f
Successfully tagged envtest:latest
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...