最近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
要約
172.17.0.0/16
ではなく、IP アドレス範囲として使用します172.17.0.0/32
。localhost
ホスト上の PostgreSQL データベースに接続するには、 ではなく、ホストの IP を使用します。コンテナを移植可能に保つには、--add-host=database:<host-ip>
フラグを使用してコンテナを起動し、database
PostgreSQL に接続するためのホスト名として使用します。- 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
ご覧のとおり、私の場合、インターフェースにはネットマスクが(または) のdocker0
IP アドレスがあります。つまり、ネットワーク アドレスは です。172.17.42.1
/16
255.255.0.0
172.17.0.0/16
IP アドレスはランダムに割り当てられますが、追加の構成がなければ、常に172.17.0.0/16
ネットワーク内にあります。各 Docker コンテナには、その範囲からランダムなアドレスが割り当てられます。
つまり、データベースへのすべての可能なコンテナからのアクセスを許可する場合は、 を使用します172.17.0.0/16
。