nginx в Docker не может общаться с localhost - PullRequest
1 голос
/ 03 ноября 2019

Цель состоит в том, чтобы:

  1. Возвращать один и тот же index.html для всех запросов
  2. За исключением случая, когда путь начинается с "/ api" (например, localhost / api / asd) - в этом случае перенаправьте этот запрос в приложение, работающее на локальном хосте: 8080

Я успешно справился с задачей, просто запустив nginx на моем Ubuntu. Но когда я пытаюсь сделать то же самое в Docker-контейнере, я получаю 502 за каждый запрос "/ api":

2019/11/03 14:35:39 [error] 6 # 6: * 22 connect () не удалось (111: Соединение отклонено) при подключении к входу, клиент: 172.17.0.1, сервер: 127.0.0.1, запрос: «GET / API / библиотека / источник / найти страницу = 0 & размер = 40 & д = JTdCJTIycXVlcnklMjIlM0ElMjIlMjIlMkMlMjJwZXJpb2QlMjIlM0ElMjJBTlRJUVVJVFklMjIlMkMlMjJjbGFzc2lmaWNhdGlvbnMlMjIlM0ElNUIlNUQlMkMlMjJ0eXBlcyUyMiUzQSU1QiU1RCU3RA == HTTP / 1.1? ", upstream:" http://127.0.0.1:8080/api/library/source/find?page=0&size=40&q=JTdCJTIycXVlcnklMjIlM0ElMjIlMjIlMkMlMjJwZXJpb2QlMjIlM0ElMjJBTlRJUVVJVFklMjIlMkMlMjJjbGFzc2lmaWNhdGlvbnMlMjIlM0ElNUIlNUQlMkMlMjJ0eXBlcyUyMiUzQSU1QiU1RCU3RA==", хост: "localhost", реферер: "http://localhost/library/period/antiquity" 172.17.0.1 - - [03 / Nov / 2019: 14: 35: 39 +0000]" GET / api/ библиотека / источник / найти страницу = 0 & размер = 40 & д = JTdCJTIycXVlcnklMjIlM0ElMjIlMjIlMkMlMjJwZXJpb2QlMjIlM0ElMjJBTlRJUVVJVFklMjIlMkMlMjJjbGFzc2lmaWNhdGlvbnMlMjIlM0ElNUIlNUQlMkMlMjJ0eXBlcyUyMiUzQSU1QiU1RCU3RA == HTTP / 1.1" 502 559 "* 1 016 *http://localhost/library/period/antiquity"" Mozilla / 5.0? (X11; Linux x86_64) AppleWebKit / 537,36 (KHTML, как Gecko) хром /78.0.3904.87 Safari / 537.36 "" - "

'172.17.0.1' выглядит странно. Я использую изображение" nginx "и оноимеет следующее в своем файле / etc / hosts:

127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  1a0b306a3a80

note '172.17.0.2', а не '172.17.0.1'.

Конфигурация Dockerfile и nginx, которую я использую, может бытьнайдено здесь: https://github.com/ahlinist/tempvs-ui

Образ собран и запускается как: sudo docker build. -t tempvs-ui sudo docker run -p 80:80 tempvs-ui

Что я делаю не так? Как заставить образ докера отправлять запросы на localhost: 8080?

1 Ответ

1 голос
/ 04 ноября 2019

Быстрый ответ : запустить docker с дополнительным параметром network :

docker run -p 80:80 --network=host tempvs-ui

Дело в том, что localhost на вашем сервере (и хосте) и DockerКонтейнер - это не то же самое.
С вашей текущей реализацией перенаправление происходит внутри контейнера Docker. В то время как ваше целевое приложение работает на хост-компьютере. Вот почему Отказано в соединении * Ошибка 1013 *.
Документация: Сеть Docker , Параметр Docker run network .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...