[解決済み】Docker コンテナからローカル/ホストの postgres データベースに接続できるようにする。
質問
最近、DockerとQGISで遊んでいて、以下の説明に従ってコンテナをインストールしました。 このチュートリアル .
GISデータを格納しているローカルホストのpostgresデータベースに接続できないのですが、すべて問題なく動作しています。これは、私のpostgresデータベースがリモート接続を受け入れるように設定されていないためだと考えています。 この記事 .
DockerでQGISを動かしているデータベースに接続しようとすると、could not connect to server.というエラーメッセージが表示されたままです。
Connection refused Is the server running on host "localhost" (::1) and accepting TCP/IP connections to port 5433?
postgres サーバーは稼働していますし、私の編集した
pg_hba.conf
ファイルで、IP アドレスの範囲 (172.17.0.0/32) からの接続を許可しています。以前、DockerコンテナのIPアドレスを問い合わせるのに
docker ps
で、IPアドレスは変化するものの、今のところ常に172.17.0.xの範囲にあります。
なぜこのデータベースに接続できないのか、何か思い当たることはありますか?おそらく、とても簡単なことだと想像しています。
Ubuntu 14.04; Postgres 9.3 を使用しています。
解決方法を教えてください。
TL;DR
-
使用方法
172.17.0.0/16
ではなく、IPアドレスの範囲として172.17.0.0/32
. -
を使用しないでください。
localhost
を使用してホストのPostgreSQLデータベースに接続し、代わりにホストのIPを使用します。コンテナの移植性を保つために、コンテナを起動する際に--add-host=database:<host-ip>
フラグを使用しdatabase
をPostgreSQLに接続するためのホスト名として使用します。 -
のみならず、すべてのIPアドレスで接続をリッスンするようにPostgreSQLが設定されていることを確認してください。
localhost
. 設定を探します。listen_addresses
は、PostgreSQLの設定ファイルの中で、通常/etc/postgresql/9.3/main/postgresql.conf
(クレジット: @DazmoNorton).
ロングバージョン
172.17.0.0/32
は
範囲
のIPアドレスではなく、1つのアドレス(namly
172.17.0.0
). このアドレスはDockerブリッジのネットワークアドレスであるため、どのDockerコンテナにも割り当てられることはありません(
docker0
) インターフェイスを使用します。
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
.
関連
-
[解決済み] UbuntuにBoostをインストールする方法
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerイメージはホストマシン上のどこに保存されていますか?
-
[解決済み] Docker - Ubuntu - bash: ping: コマンドが見つかりませんでした。
-
[解決済み】Dockerイメージとコンテナの違いは何ですか?
-
[解決済み】Docker Postgresのスクリプトでユーザー/データベースを作成する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 新しいJupyter Notebookを開けない[Permission Denied]。
-
[解決済み] 不明なエンコーダ 'libfaac'
-
CurlはサーバーからEmpty replyを返すため、特殊文字の扱いができず、Curlにアクセスできない結果、ブラウザがアクセスできるようになります。
-
[NVML の初期化に失敗しました。ドライバ/ライブラリのバージョンの不一致(解決済み)
-
エラーを解決する-bash: . /configure: パーミッションが拒否されました
-
[解決済み] 30秒ごとにcronを実行する
-
[解決済み] ssh_init: host does not exist... PSCPを使ってubuntu EC2インスタンスにtomcat7フォルダをコピーしようとしているのですが。
-
[解決済み】UbuntuでJavaの環境パスを設定する方法
-
[解決済み] Docker-ComposeがDocker Daemonに接続できない。
-
[解決済み] SSHのパスワード認証を無効にする【非公開