#c# #.net #docker #asp.net-core #.net-core
#c# #.net #docker #asp.net-core #.net-core
Вопрос:
Я создал файл docker и предоставил порт. Я также настраиваю свой program.cs для чтения этих URL-адресов портов, но не могу получить к нему доступ.
Из того, что я вижу в консоли docker, это то, что мое приложение запущено. Я просто не могу до него добраться.
Я пробовал localhost: 5024 и 172.17.0.2: 5024, но это просто не сработало.
Вот мой файл docker
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app
EXPOSE 80
EXPOSE 5024
# copy csproj and restore as distinct layers
COPY *.sln .
COPY Api/*.csproj ./Api/
RUN dotnet restore
# copy everything else and build app
COPY Api/. ./Api/
COPY Api.Core/. ./Api.Core/
WORKDIR /app/Api
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
WORKDIR /app
COPY --from=build /app/Api/out ./
ENTRYPOINT ["dotnet", "Api.dll"]
Это моя program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
webBuilder.UseIISIntegration();
webBuilder.UseKestrel();
webBuilder.UseStartup<Startup>();
webBuilder.UseUrls("http://*:5024");
});
И я запускаю эти команды, чтобы запустить его
docker build -f Api/Dockerfile -t quiplogs_api .
docker run -d -p 5024:80 --name app quiplogs_api
Ответ №1:
короткий ответ
измените свою docker run
команду на приведенную ниже:
docker run -d -p 5024:5024 --name app quiplogs_api
Доступ к api с помощью localhost:5024/api …. или измените UseUrls на использование порта 80, и все останется прежним
Длинный ответ
В мире docker есть две сети.
Первый находится внутри мира docker, где запущены все контейнеры. Второй — это хост-машина. Когда вы пишете приложение docker, вы должны быть очень осторожны с тем, в какой сети вы находитесь.
-p не для портов, это опция публикации.
с помощью этого переключателя вы устанавливаете связь между сетью хоста и сетью docker. Ваша команда говорит опубликовать порт хоста этого контейнера 5024 и сопоставить его с сетевым портом 80 docker. Но UseUrls фактически настраивает его для запуска на порту 5024 в docker. Небольшое семантическое несоответствие. Новая команда исправляет это. Или вы можете изменить UseUrls для использования порта 80.