0

docker 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 を使用するとハングします。なぜそうなのか、私にはわかりません。DB を含む多くのホストにアプリケーションを分散させていますが、場所によっては他のアドレスを使用したくありません。誰かがこれを手伝ってくれますか?

4

1 に答える 1

0

問題は Docker ではない可能性が高く、説明しているのは、パケットを 111.111.111.111 にデフォルト ゲートウェイにルーティングする (会社の) ネットワークの構成です。パブリック IP 111.111.111.111 は、NAT の背後にある IP であると思われます。

つまり、111.111.111.111 は 127.0.0.1 にマップされません。これは、バインドがコンピューターの外部のどこかで行われるためです。

このiptables redirect all requests to localhost のようなことをしたいでしょう

于 2016-10-20T14:02:44.373 に答える