Как сделать сопоставление портов в Docker при запуске основных приложений .net? - PullRequest
0 голосов
/ 18 октября 2019

чистый основной проект. Я успешно построил проект. Ниже приведен мой dockerfile.

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 4040
EXPOSE 5050

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["MWS.AspNetCoreApis/MWS.AspNetCoreApis.csproj", "MWS.AspNetCoreApis/"]
RUN dotnet restore "MWS.AspNetCoreApis/MWS.AspNetCoreApis.csproj"
COPY . .
WORKDIR "/src/MWS.AspNetCoreApis"
RUN dotnet build "MWS.AspNetCoreApis.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "MWS.AspNetCoreApis.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
CMD tail -f /dev/null
ENTRYPOINT ["dotnet", "MWS.AspNetCoreApis.dll"]

Я создаю свое приложение как docker build -t locationservices . Здесь я создаю свой образ. Затем, когда я запускаю свое изображение, используя docker run -d locationservices, оно дает длинный идентификатор. Когда я пытаюсь нажать http://localhost:40/swagger/index.html или http://localhost:5050/swagger/index.html, моя веб-страница не открывается. Когда я запускаю> docker run -it locationservices, я получаю следующее сообщение.

Среда хостинга: корневой путь к производственному контенту: / app. Прослушивание: http://[::]:80 Приложение запущено. Нажмите Ctrl + C, чтобы завершить работу.

Но я не могу запустить свое приложение, используя любой из приведенных ниже URL-адресов

http://localhost:5050/swagger/index.html
http://localhost:4040/swagger/index.html
http://localhost:80/swagger/index.html

, может кто-нибудь помочь мне разобраться в проблеме,Любая помощь будет оценена. Спасибо

Ответы [ 3 ]

1 голос
/ 18 октября 2019

При запуске контейнера необходимо опубликовать порты, чтобы при нажатии localhost:someport запрос был перенаправлен в контейнер. Это делается с помощью опции --publish/-p при запуске контейнера:

docker run -d -p 4040:4040 -p 5050:5050 locationservices

, и теперь вы можете получить доступ к localhost:5050/swagger/index.html и localhost:4040/swagger/index.html.

1 голос
/ 19 октября 2019

У меня была похожая проблема, и я нашел решение. Вы можете передать параметр urls в вашу точку входа, чтобы запустить приложение на каком-то определенном порту. Пример: ENTRYPOINT ["dotnet", "watch", "run", "--server.urls", "http://0.0.0.0:5050"]

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

Надеюсь, это поможет вам;)

0 голосов
/ 18 октября 2019

Внутри контейнера приложение привязывается к локальному хосту через порт 80. Однако это внутри контейнера. Когда вы пытаетесь нажать http://localhost, localhost в этом контексте это ваш компьютер, а не экземпляр контейнера. Вам необходимо получить доступ к контейнеру через его IP-адрес в локальной сети, а не localhost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...