説明:
PostgreSQLは、TCP / IPだけでなく、UNIXソケットを介した接続も受け入れる場合があります。 -h localhost
引数はpsql
に伝えます UNIXソケットではなくTCP接続を使用する。
現在の/docker-entrypoint-initdb.d
のスクリプトの実行中にそれを見るでしょう。 PostgreSQLはUNIXソケットでのみリッスンし、起動ログには次のように表示されます。
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
これは、psql -h localhost
を意味します PostgreSQLはIPソケットをリッスンしないため、データベースに接続しません。 psql
を使用する必要があります なし -h localhost
TCP接続の代わりにUNIXソケットを使用するようにするオプション。
しかし、なぜpsql -h localhost
を実行するのか 手動で動作しますか?
docker-entrypoint.sh
を調べると ここでも、すべてのinitスクリプトが実行されると、PostgreSQLが停止
次に、開始
再び通常(操作)モードで、UNIXとIPソケットの両方でリッスンします:
LOG: listening on IPv4 address "0.0.0.0", port 5432
LOG: listening on IPv6 address "::", port 5432
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
したがって、起動プロセスが完了すると、TCP接続を使用してPostgreSQLに接続できるため、コンテナに入り、psql -h localhost
を実行できます。 成功します。