2016-10-20 4 views
0

Я создал экземпляр Докер Postgres сНевозможно подключиться к dockerized Postgres на локальном хосте, но удаленное соединение работает

docker run -d \ 
    --name test_db \ 
    -v data:/var/lib/postgresql/data \ 
    -e "POSTGRES_PASSWORD=abcdefghij" \ 
    -e "POSTGRES_USER=testuser" \ 
    -p 5432:5432 \ 
    postgres 

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

psql -U testuser -h 111.111.111.111 -d testuser // in reality I use proper IP 

, но если я хочу сделать это на том же хосте, где контейнер, это невозможно подключиться (он просто зависает).

Мой pg_hba.conf (внутри контейнера)

# TYPE DATABASE  USER   ADDRESS     METHOD 
local all    all          trust 
host all    all    127.0.0.1/32   trust 
host all    all    ::1/128     trust  
host all    all    0.0.0.0/0    md5 

Внутри postgresql.conf есть строка:

listen_addresses = '*' 

Соответствующие линии IPTables:

$ iptables -L | grep sql 
ACCEPT  tcp -- anywhere    172.19.0.2   tcp dpt:postgresql 

Кроме того, это работает локально, если я использую адрес 172.19.0.2, но если я использую публичный IP-адрес, он просто зависает. Я понятия не имею, почему это так. У меня есть мое приложение, распределенное между многими хостами, в том числе с БД, и я не хочу использовать другой адрес в зависимости от местоположения. Может ли кто-нибудь помочь в этом?

ответ

0

Проблема, скорее всего, не Docker, а из того, что вы описываете, является конфигурация вашей (корпоративной) сети, которая маршрутизирует пакеты до 111.111.111.111 по направлению к шлюзу по умолчанию. Я подозреваю, что публикация ip 111.111.111.111 является вашим IP-адресом за NAT.

Для краткости 111.111.111.111 не будет отображаться в 127.0.0.1, поскольку привязка выполняется где-то вне вашего компьютера.

Вы хотели бы сделать что-то вроде этого iptables redirect all requests to localhost

+0

Два тестовых серверов просто нормальный чистый VPS на ArubaCloud. Я не уверен, есть ли какой-либо NAT, но этого не должно быть. Я попробую перенаправить с помощью iptables и скажу, если это сработает. – Valar