Не уверен, что этот вопрос все еще актуален для вас, но я также столкнулся с этой проблемой и оставил свое решение здесь для других.Я использовал PowerShell со следующей командой docker (почти такой же, как ваша команда, просто использовал внутренний порт 90 вместо 5000 и использовал переключатель - rm , который будетавтоматически удаляет контейнер при его выходе):
docker run --rm -it -p 8080:90 -v ${pwd}:/app -w "/app" microsoft/dotnet /bin/bash
И после этого я получил интерактивную оболочку bash, а при наборе dotnet run
я получил такой же вывод, как и вы, и не могу добраться до моего сайта в контейнеречерез localhost:8080
.
Я решил это, используя метод UseUrls
или --urls
аргумент командной строки.Они (метод UseUrls
или --urls
аргумент командной строки) указывают IP-адреса или адреса хостов с портами и протоколами, которые сервер должен прослушивать для запросов.Ниже описания решений, которые работали для меня:
- Редактировать
CreateWebHostBuilder
метод в Program.cs , как показано ниже:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://+:90") //for your case you should use 5000 instead of 90
.UseStartup<Startup>();
Вы можетепри необходимости укажите несколько портов, используя следующий синтаксис .UseUrls("http://+:90;http://+:5000")
. При таком подходе вы просто набрали dotnet run в оболочке bash, и тогда ваш контейнер будет доступен с помощью localhost:8080
.
Но с помощью предыдущего подхода вы изменяете поведение исходного кода по умолчанию, которое вы можете забыть, а затем, возможно, следует отладить и исправить в будущем.
Поэтому я предпочитаю 2-й подход без изменения исходного кода.После ввода команды docker и получения интерактивной оболочки bash вместо dotnet run введите ее с аргументом --urls
, как показано ниже (в вашем случае используйте порт 5000 вместо 90):
dotnet run --urls="http://+:90"
В документации также существует третий подход, в котором вы можете использовать ASPNETCORE_URLS
переменную окружения, но этот подход мне не помог.Я использовал следующую команду (с переключателем -e ):
docker run --rm -it -p 8080:90 -v ${pwd}:/app -w "/app" -e "ASPNETCORE_URLS=http://+:90" microsoft/dotnet /bin/bash
Если вы наберете printenv inbash вы увидите, что переменная окружения ASPNETCORE_URLS
передана контейнеру, но по какой-то причине dotnet run игнорирует ее.