почему мое docker контейнер ASP. NET основное приложение недоступно после завершения отладки в Visual Studio - PullRequest
0 голосов
/ 27 апреля 2020

Мой заголовок объясняет большую часть этого, но я хочу понять, почему я могу получить доступ к https://localhost: 32770 / и получить свои конечные точки API, когда я отлаживаю в Visual Studio, но когда я заканчиваю отладку становится недоступным.

В настоящее время я нахожусь в гуще нескольких дней, чтобы обернуть голову вокруг Docker и Kubernetes, и это немного озадачивает меня, и я действительно хотел бы заполнить этот пробел в моем знание.

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

Я заметил, что он запускается в начале сборки:

docker exec -i 0f855d9b4c801bf8c52da48e6dd02ffdf0fe7242fde22fb9a221616e4b2900f9 /bin/sh \
-c "if PID=$(pidof dotnet); then kill $PID; fi"

, но я не не вижу, как это меняет то, что происходит после завершения отладки, когда это происходит до запуска файла dockerfile и всего остального. Я не понимаю - c в команде, но я понимаю, что скрипт в кавычках после его запуска в контейнере, следуя синтаксису docker exec docker exec [OPTIONS] CONTAINER COMMAND [ARG...]. кажется, что этот скрипт убивает существующую сборку кода до того, как будет создан новый.

Этот запуск выполняется до запуска файла dockerfile

docker build -f "F:\Dev\API_files\API_name\Dockerfile" 
--force-rm 
-t API_name:dev 
--target base  
--label "com.microsoft.created-by=visual-studio" 
--label "com.microsoft.visual-studio.project-name=API_name" "F:\Dev\API_name"

Я не вижу здесь ничего, что могло бы изменяя способ работы контейнера, в этом случае rm «удаляет промежуточные контейнеры после сборки (по умолчанию true)» в соответствии с docker build --help

, следующий файл dockerfile запускается, и он в значительной степени используется по умолчанию для ASP. NET core Applications, он имеет

EXPOSE 80
EXPOSE 443

, а остальные простые шаги сборки. После всего этого я не могу найти много признаков того, что происходит. Я предполагаю, что это связано с IIS Express, но на самом деле я не знаю, что с ним происходит и когда отлаживается визуальный стержень ios. Что происходит за кулисами, которые работали во время отладки, чтобы открыть порт localhost для контейнера docker?

Редактировать: я обнаружил команду docker run, которая может иметь к этому какое-то отношение, но может и нет. Команда docker run имеет флаг -P для 'Publi sh все открытые порты для случайных портов', но контейнер никогда не останавливается, поэтому я не смогу найти эти порты и подключиться к API?

...