Как подключить приложение в контейнере Tomcat к контейнеру Postgres, созданному в той же сети? - PullRequest
0 голосов
/ 10 сентября 2018

Я запускаю приложение на основе tomcat внутри контейнера и контейнер базы данных Postgres на моем ubuntu хосте с помощью docker compose. Они находятся в той же сети, что и я. У меня брандмауэр включен . У моего брандмауэра нет запрещающего правила для порта 5432. Когда мой брандмауэр отключен, мое приложение Tomcat может подключаться к контейнеру базы данных, используя его IP-адрес или имя службы. Но когда брандмауэр включен, он не подключается к контейнеру базы данных. Я установил DOCKER_OPTS = "- iptables = false" в docker.conf и перезапустил Docker. Почему он не подключается, когда включен брандмауэр?

1) Вот мои активные правила: -

К действию с
--------
2377 / tcp ALLOW Anywhere
7946 / tcp ALLOW Anywhere
7946 / UDP ALLOW Anywhere
4789 / UDP ALLOW Anywhere
22 ALLOW Anywhere
8443 РАЗРЕШИТЬ 10.20.220.185
8443 РАЗРЕШИТЬ 10.20.220.78
8081 РАЗРЕШИТЬ 10.5.0.7
5432 ALLOW Anywhere
8081 РАЗРЕШИТЬ 10.5.0.5
2377 / tcp (v6) ALLOW Anywhere (v6)
7946 / tcp (v6) ALLOW Anywhere (v6)
7946 / UDP (v6) ALLOW Anywhere (v6)
4789 / udp (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
5432 (v6) ALLOW Anywhere (v6)

=============================================== ==========================

2) Это конфигурация моего приложения для подключения к базе данных с использованием имени службы: - driverClass=org.postgresql.Driver jdbcUrl=jdbc:postgresql://PostgresDatabase:5432/dockerdb user=dockeruser

1 Ответ

0 голосов
/ 11 сентября 2018

Настройка --iptables=false означает, что демон docker не смог настроить правило (я) iptables на хосте. Тем не менее, это важно, если у вас включен UFW.
Я уверен, что эта проблема исчезнет после удаления DOCKER_OPTS="--iptables=false" в конфигурации и перезапуска демона Docker.

В процессе запуска демон Docker настраивает некоторые дополнительные правила iptable, чтобы обеспечить хорошее взаимодействие между контейнерами / между контейнером и внешним миром, поскольку firewall / ufw будет отбрасывать пакеты на DEFAULT_FORWARD_POLICY.

Ниже приведен грубый процесс, как докер создает правила iptable:

  1. Включить Включить NAT на Docker0 с помощью инструмента iptables.
    iptables -I POSTROUTING -t nat -s 172.17.0.1 ! -o docker0 -j MASQUERADE

  2. Включение связи в контейнерах.
    iptables -I FORWARD -i docker0 -o docker0 -j ACCEPT

  3. Включить связь между контейнером и внешним миром.
    iptables -I FORWARD -i docker0 ! -o docker0 -j ACCEPT

  4. Принимать любые пакеты от внешних соединений, которые уже установлены.
    iptables -I FORWARD -o docker0 -m conntrack -ctstate RELATED,ESTABLISHED -j ACCEPT.

Прежде всего, у вас есть iptables, установленный false и брандмауэр включен без каких-либо дополнительных действий. Точно так же, как вы выбрасываете ключ с закрытой дверью, но вы все еще хотите выйти на улицу. Поэтому я настоятельно рекомендую вам не изменять какие-либо настройки сети докера до того, как вы полностью поймете архитектуру сети докера и то, как эти компоненты работают вместе.

Это другой вопрос , заданный по-другому. Пусть ответы помогут вам больше.

...