Не удается подключиться к службе в контейнере docker

#docker #asp.net5

Вопрос:

У меня есть созданная служба на основе .net 5. Эта услуга хорошо работает на местном уровне. Я пытаюсь поместить это в контейнер докера. Однако я не могу подключиться к нему. Служба работает с использованием Kestrel, настроенной на 8080

Мой док-файл довольно прямолинеен

 FROM mcr.microsoft.com/dotnet/aspnet:5.0 #msft image

COPY ./bin/debug/net5.0/ .        #local items

EXPOSE 8080
ENTRYPOINT [dotnet, myservice.dll]
 

Команда, используемая для запуска службы

 docker run -it -p 8080:8080 myservice
 

Я создал изображение, и когда я запускаю приведенное выше изображение с -it флагом, я вижу, что служба выполнена. При проверке/экспорте контейнера я также вижу некоторые сгенерированные файлы журнала приложений, указывающие на успешную работу службы. Когда я запускаю конечную точку swagger, выполняя curl внутри контейнера, я получаю HTML-страницу пользовательского интерфейса swagger.

Однако, когда я запускаю это с моей реальной машины, кажется, что она не подключается ни к одной из конечных точек. Я запустил изображение с помощью -p 8080:8080 , чтобы оно отвечало на тот же порт. Я пробовал использовать случайные карты локальных портов, поэтому, конечно, порты не заблокированы.

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

Не уверен, что я здесь упускаю. Настройка довольно проста, так как это всего лишь фиктивный сервис для тестирования с одной конечной точкой swagger и другой конечной точкой weatherforecast, которая поставляется с шаблоном .net.

Комментарии:

1. Убедитесь, что вы не вводили exit в окне bash после выполнения run . Или еще лучше, попробуйте запустить свое изображение без -it флага, а затем попробуйте получить к нему доступ. Возможно, что после входа в окно bash вы можете выйти оттуда, что завершит контейнер. Также при попытке доступа с вашего компьютера сначала запустите docker ps и убедитесь, что ваш контейнер запущен.

2. @LUC1F3R, Спасибо за ответ, однако я совершенно уверен, что я не вышел, и контейнер запущен. Также попробовал запустить его с помощью пользовательского интерфейса docker, просто чтобы убедиться, что поведение такое же.

3. @точка с запятой : Спасибо за предложения. Я решил эту проблему. Конфигурация службы была жестко запрограммирована для прослушивания localhost, что и стало причиной проблемы. Переключил его на 0.0.0.0 на данный момент, и это сработало.

Ответ №1:

По умолчанию контейнер будет прослушивать внутренний порт 80, если вы не переопределили его с помощью переменной ASPNETCORE_URLS среды. EXPOSE в файле Docker ничего не делается, кроме документирования портов, предназначенных для использования.

Попробуйте запустить его, с -p 8080:80 помощью которого порт 8080 на локальном компьютере будет сопоставлен с портом 80 в контейнере.