#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 в контейнере.