Как отправить запрос из контейнера Docker на внешнее имя хоста / порт этого контейнера? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть веб-приложение, работающее внутри Docker-контейнера php:7.1.8-apache.Приложение имеет порт 80 внутри контейнера и порт 8080 вне его.

Одна часть приложения отправляет запросы себе, но использует внешнее имя хоста / порт (например, http://outsidehostname.local:8080).

Это не работает, потому что порт и имя хоста не существует внутри контейнера.

Я уже попробовал флаг --hostname, но это не решает проблему сдругой порт внутри и снаружи моего контейнера.Поэтому я ищу другое решение.

Имя хоста (outsidehostname.local) происходит от хоста os (в моем случае macos).Я использую dnsmasq для разрешения всех *.local имен хостов в 127.0.0.1.

Есть ли способ настроить докер так, чтобы этот запрос работал без изменения поведения приложения?

1 Ответ

0 голосов
/ 05 декабря 2018

В Docker у вас есть различные опции для установки имен хостов, которые могут быть разрешены из контейнера в контейнер: Когда использовать --hostname в докере?

Это не работаетпотому что порт и имя хоста не существует внутри контейнера.

Почему бы и нет?Откуда берется это внешнее имя хоста?

Имена хостов, которые не могут быть разрешены докером, могут быть разрешены другими DNS-серверами, настроенными на уровне ОС или сети.В общем, как будет решаться имя хоста, это не тривиальный вопрос, и вам сначала нужно понять, как / где определяется и разрешается ваше внешнее имя хоста.

ОБНОВЛЕНИЕ:

Имя хоста (outsidehostname.local) происходит от хоста os (в моем случае macos).Я использую dnsmasq для разрешения всех *.local имен хостов в 127.0.0.1.

Это объясняет вашу проблему: войдите в ваш работающий контейнер (предполагая, что он основан на Linux), используя docker exec -it <containerId> /bin/sh, затем внутри контейнераесли вы попытаетесь найти outsidehostname.local, вы увидите, что outsidehostname.local не может быть разрешено, потому что в операционной системе контейнера нет такой информации DNS.Если бы он мог быть решен до 127.0.0.1, вашей следующей проблемой действительно был бы неправильный порт.

По сути, запуск веб-сервера внутри контейнера не позволяет запустить собственный распознаватель DNS OSX вне контейнера.Я не знаю достаточно о вашем случае использования, чтобы действительно предложить хорошее решение, но для изображений на основе Linux вы всегда можете отредактировать /etc/hosts или /etc/resolv.conf.

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