LoginSignup
0
0

[備忘][docker][postgres]dockerで立ち上げたpostgresコンテナのDBにpsqlコマンドでアクセスできない

Posted at

問題発生までの過程

postgresコンテナを下記コマンドで起動した。

docker run --name some-postgres -e POSTGRES_PASSWORD=password -d postgres

次にpsqlコマンドでコンテナ内のDBに下記のようにアクセスしたが、接続できなかった。

psql -h localhost -p 5432 -U postgres

----結果----
psql: エラー: "172.17.0.2"、ポート5432のサーバーへの接続に失敗しました: Operation timed out
	サーバーはそのホスト上で稼働していてTCP/IP接続を受け付けていますか?

postgresでは...
ユーザー名を指定しなければ、デフォルトユーザー名がpostgresとなる。
DB名を指定しなければ、DB名がユーザー名と同じになる(今回はユーザー名も指定してないので、postgresとなる)
ポート番号を指定しなければ、デフォルトポートが5432となる。

解決

docker runのときに、ポートを指定していなかったから。
こう起動すべきだった。

docker run --name postgres-container -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres

原因究明まで

docker inspect postgres-container
----結果----
~~~
"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "612d99cf70a9e6e694bc5987de054318c03188c629bc293e4b7c5e1617b74b29",
            "SandboxKey": "/var/run/docker/netns/612d99cf70a9",
            "Ports": {
                "5432/tcp": null
            },
~~~

ネットワークなどに詳しくはないが、この"Ports": { "5432/tcp": null },がnullとなっているのが変だと感じた。
で、コンテナ起動時に-p 5432:5432とポートマッピングしてやると
"Ports": { "5432/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "5432" } ] },となった。

docker runでポートマッピングをしない場合は、デフォルトでホストの5432ポートとマッピングされるものだと思っていたがそうではなかったようです。
ホストからアクセスしたい場合は、マッピングを省略しないようにします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0