Вот немного предыстории. Я реализовал несколько веб-API с использованием архитектуры микросервисов. Я пытаюсь сделать мои микросервисы доступными через HTTPS. Микросервисы разрабатываются с использованием ядра .net, поэтому, согласно документу Microsoft, для обеспечения HTTPS мне необходимо настроить Kestrel. Вот как я это сделал.
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("cert.pfx", "pwd");
});
})
Для простоты я использую kestrel и пропускаю обратный прокси. Я обязательно включу Nginx в качестве обратного прокси, но это будущая работа. Я тестировал локально, все заработало. Затем я развернул его на Docker. Вот файл docker-compose.override
version: '3.4'
services:
dataservice:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
ports:
- "5000:80"
- "5001:443"
В dockerfile порты 5000 и 5001 открыты. Я встроил проект в образы и запустил его в Docker, используя docker run -it --rm -p 5000:80 --name *name* *imagename*
. Докер показывает Now listening on: http://127.0.0.1:5000
и Now listening on: https://127.0.0.1:5001
. Теперь проблема в том, что оставьте часть https в стороне, API не могут получить доступ даже по http. Браузер просто показывает This page isn’t working 127.0.0.1 didn’t send any data. ERR_EMPTY_RESPONSE
. Я нашел подобный вопрос отсюда Docker: не могу открыть порт от контейнера к хосту
, каким-то образом сервер должен слушать 0.0.0.0. Хотя я не до конца понимаю причину, я изменил конфигурацию пустельги на
options.Listen(IPAddress.Any, 5000);
снова создал и запустил образы докера, и Docker показывает Now listening on: http://0.0.0.0:5000
, но он все равно не работает. Я также пытался заменить IP на localhost
, это бесполезно. Я не использовал .UseHttpsRedirection()
, https не должен иметь ничего общего с проблемой.
Мне не хватает какой-либо конфигурации или что-то не так? Было бы очень полезно, если бы кто-то мог пролить свет. Заранее спасибо.