Невозможно получить доступ к приложению Docker из браузера - PullRequest
0 голосов
/ 03 июня 2018

У меня есть .NET Core 2.1 API, который при запуске через Visual Studio в Windows получает HTTP GET из браузера и успешно возвращает данные из базы данных MySQL.

Я пытался добавитьAPI для контейнера Docker (внутри Ubuntu) - это сборки, но я не могу получить доступ к API из браузера:

Firefox

Что я пробовал :

  • Проверка доступных портов.Вот соответствующий вывод:

enter image description here

  • Подключение с использованием другого браузера: в Chromium написано «Этот сайт не может бытьдостиг: localhost неожиданно закрыл соединение. '
  • Тестирование неиспользуемых портов в браузере, чтобы увидеть, возвращает ли это другое сообщение - для Firefox неиспользуемые порты возвращают «Невозможно подключиться» вместо «Ошибка безопасного соединения », и в Chromium они возвращают« localhost отказался соединиться ».вместо «localhost неожиданно закрыл соединение».
  • В Firefox настройте «security.tls.insecure_fallback_hosts» на «localhost».
  • Двойная проверка правильности сопоставления портов в docker-compose.yml - в «портах» для соответствующего контейнера, 44329 сопоставлен с 44329.
  • Выполнение запроса к БД при запуске API и регистрация результата: это успешно.Я запускаю docker-compose up, API запускается, подключается к контейнеру БД и записывает результат запроса SQL в текстовый файл.Таким образом, проблема вряд ли связана с базой данных.
  • Ведение журнала запросов GET: Внутри Windows запросы GET успешно регистрируются, но в контейнере Ubuntu Docker это не так.

Это может быть актуально: в Windows API работает правильно, только если вы запускаете его из Visual Studio.Если вы выполните dotnet webapi.dll, вы получите этот вывод

...\netcoreapp2.1>dotnet webapi.dll
...
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.

Так что здесь он не работает на 44329;вместо этого он доступен через браузер 5001, где вы получаете это сообщение, которое совсем не холодно: enter image description here Нажатие «ADVANCED» позволяет перейти к API.

  • Так что я также попытался подключиться через 5001 в Ubuntu без удачи.

Вот вывод из 'docker-compose up':

matt@Matt-Ubuntu:~/docker2$ docker-compose up
Starting docker2_mysql_1 ... done
Starting docker2_dbmodelmapper_1 ... done
Attaching to docker2_mysql_1, docker2_dbmodelmapper_1
... (mysql stuff) ...
dbmodelmapper_1  | Hosting environment: Production
dbmodelmapper_1  | Content root path: /app
dbmodelmapper_1  | Now listening on: http://[::]:80
dbmodelmapper_1  | Application started. Press Ctrl+C to shut down.
  • Видя порт 80, я попытался подключиться к нему, но безуспешно.

  • Соответствующий контейнер, показанный docker ps:

    enter image description here

Какую проблему я здесь рассматриваю?

1 Ответ

0 голосов
/ 05 июня 2018

Как отмечали несколько человек в комментариях (спасибо sp0gg, Martin Ullrich и Daniel Lerps), API неправильно прослушивал порт 80.

Решение было сопоставить порт 5000 с 44329 в Docker-compose.yml для контейнера API, а также измените Dockerfile для передачи портов в качестве аргументов в dotnet при запуске API ASP.NET:

ENTRYPOINT ["dotnet", "webapi.dll", "--urls", "http://*:5000;http://*:5001"]
...