Dockerコンテナがローカル/ホストのPostgresデータベースに接続できるようにする 質問する

Dockerコンテナがローカル/ホストのPostgresデータベースに接続できるようにする 質問する

最近DockerとQGISを試していて、以下の手順に従ってコンテナをインストールしました。このチュートリアル

すべてうまく機能していますが、GISデータをすべて含むローカルホストのpostgresデータベースに接続できません。これは、postgresデータベースがリモート接続を受け入れるように構成されていないためだと考えており、以下の手順に従って、リモート接続を許可するようにpostgres confファイルを編集しています。この記事

DockerでQGISを実行しているデータベースに接続しようとすると、まだエラーメッセージが表示されます。サーバーに接続できませんでした。postgresConnection refused Is the server running on host "localhost" (::1) and accepting TCP/IP connections to port 5433?サーバーは実行されており、pg_hba.confファイルを編集して、IPアドレスの範囲(172.17.0.0/32)からの接続を許可しました。以前、dockerコンテナのIPアドレスを照会しましたdocker psが、IPアドレスは変化しますが、これまでは常に172.17.0.xの範囲内でした。

このデータベースに接続できない理由について何か考えはありますか? おそらく非常に単純なことだと思います。

私はUbuntu 14.04、Postgres 9.3を使用しています

ベストアンサー1

要約

  1. 172.17.0.0/16ではなく、IP アドレス範囲として使用します172.17.0.0/32
  2. localhostホスト上の PostgreSQL データベースに接続するには、 ではなく、ホストの IP を使用します。コンテナを移植可能に保つには、--add-host=database:<host-ip>フラグを使用してコンテナを起動し、databasePostgreSQL に接続するためのホスト名として使用します。
  3. PostgreSQL が、だけでなくすべての IP アドレスで接続をリッスンするように設定されていることを確認します。PostgreSQLの設定ファイルでlocalhost設定を探します。通常、ここ(クレジット: @DazmoNorton) にあります。listen_addresses/etc/postgresql/9.3/main/postgresql.conf

ロングバージョン

172.17.0.0/32は IP アドレスの範囲ではなく、単一のアドレス (つまり172.17.0.0) です。これは Docker ブリッジ ( docker0) インターフェースのネットワーク アドレスであるため、Docker コンテナにそのアドレスが割り当てられることはありません。

Docker が起動すると、新しいブリッジ ネットワーク インターフェイスが作成されます。これは、次のように呼び出すと簡単に確認できますip a

$ ip a
...
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
       valid_lft forever preferred_lft forever

ご覧のとおり、私の場合、インターフェースにはネットマスクが(または) のdocker0IP アドレスがあります。つまり、ネットワーク アドレスは です。172.17.42.1/16255.255.0.0172.17.0.0/16

IP アドレスはランダムに割り当てられますが、追加の構成がなければ、常に172.17.0.0/16ネットワーク内にあります。各 Docker コンテナには、その範囲からランダムなアドレスが割り当てられます。

つまり、データベースへのすべての可能なコンテナからのアクセスを許可する場合は、 を使用します172.17.0.0/16

おすすめ記事