2015-07-19 5 views
1

У меня есть следующие установки, работающие на одном хосте:докер: сети без привязки

  • 1 контейнер с Nginx: это один служит обратный прокси-сервер для некоторых веб-сервисов
  • х WebServices контейнер предлагая, выставив порт к хосту
  • х «Oldschool»/не dockerized WebServices

при настройке Nginx для прокси «локальный: $ EXPOSED_OR_NATIVE_PORT», это не работает, потому что Nginx не может подключиться к этот порт. Как настроить докеры nginx, чтобы служить прокси для контейнеров и стандартных сервисов?

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

Любая идея/рекомендация?

Благодаря

+0

Если вы хотите, чтобы nginx внутри контейнера прокси для служб на хосте, вы можете просто запустить этот контейнер с '--net = host' – Bryan

+0

ah, который исправил его. Не могли бы вы разместить это как ответ, поэтому я могу выбрать это как решение? – Dakkar

ответ

1

Если вы хотите Nginx внутри контейнера для прокси-сервера для услуг на хосте, вы можете просто запустить этот контейнер с --net=host, чтобы он не был помещен в пространство имен сетей и напрямую обращался к сетевым интерфейсам хоста.

0

Если Nginx является dockerized, и вы хотите, чтобы достичь другой контейнер или хост вы должны использовать хосты IP и НЕ локальный. По умолчанию 172.17.42.1, как можно прочитать здесь https://docs.docker.com/articles/networking/

Таким образом, вы должны прокси:

proxy_pass http://172.17.42.1:$EXPOSED_OR_NATIVE_PORT; 
+0

Хмм шире? На Dockerhost: 'curl http: //172.17.42.1: 8080 Вы являетесь redirected. ' В контейнере: ' cat Dakkar

+0

Так что он работает с хостом, но не внутри контейнера? Добавление вывода 'ifconfig' и' curl -I http: //172.17.42.1: 8080' (как из Dockerhost, так и из внутреннего контейнера) также поможет. – Ben

1

Отвечая себя после попытки много вещей. Я надеюсь, что это помогает кому-то.

У меня был следующий процесс: Как сказал @Ben, использование моста ip помогло, и все было в порядке.
Но потом я понял, что эта настройка не работает с UFW на ubuntu, и каждый открытый порт каждого запуска док-контейнера был доступен из Интернета.
Причина этого заключается в том, что докер работает с iptables, и это противоречит правилам iptables, созданным UFW. Очень опасно в моих глазах. Чтобы исправить эту проблему, я запустил dockerdaemon с DOCKER_OPTS="--iptables=false". Это решило проблему всемирно доступных экспонированных докеров. Но теперь я больше не могу получить доступ к контейнеру докера из контейнера ngix. Именно здесь @Bryan помог: контейнер, запущенный с --net host, имеет доступ к локальному хосту и всем открытым портам.
Последний шаг был Обязательное: добавление этого Iptables правило было необходимо для того, чтобы иметь доступ к WWW изнутри грузчиком контейнера: iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE

LG Dakky

Смежные вопросы