Я запускаю docker swarm с текущими настройками
swarm.abc.com (скажем, 192.168.1.1) - главный node1.abc.com - дочерний node2.abc.com - дочерний
У меня есть контейнер, работающий в рое, работающем на порту 888. Если я подключусь к 192.168.1.1:888 - я могу получить к нему доступ - и это хорошо.
Еще у меня есть nginx на swarm.abc.com. в конфигурации nginx у меня есть
server {
listen 80;
server_name my.domain.com;
location / {
proxy_pass http://localhost:888; #which should redirect me to 192.168.1.1
}
}
Однако когда я подключаюсь к my.domain.com У меня тайм-аут соединения. Любая помощь?
Ура
Сеть имеет пространство имен в докере, и частью этого пространства имен является устройство обратной связи, также известное как 127.0.0.1 или localhost. Это означает, что localhost внутри контейнера nginx указывает только на сеть контейнера nginx, а не на ваш внешний хост.
Для сети контейнер-контейнер разместите контейнеры в той же сети докеров, созданной пользователем (по умолчанию compose делает это за вас). Затем вы можете подключаться к другим контейнерам по их имени контейнера, идентификатору контейнера, имени службы или сетевому псевдониму. Итак, если ваше имя контейнера app-x
, а внутри контейнера он прослушивает порт 999, и у вас есть 888:999
как ваш порт вперед, тогда конфигурация nginx будет выглядеть так:
proxy_pass http://app-x:999;
Обратите внимание, что нет необходимости публиковать или открывать порт из app-x, чтобы nginx мог достичь его через сеть контейнеров.