sql >> データベース >  >> RDS >> PostgreSQL

/docker-entrypoint-initdb.d/db_init.shでpsqlコマンドを実行するとエラーが発生します(psql:サーバーに接続できませんでした:接続が拒否されました)

    このコミット のようです スクリプトが壊れています。

    説明:

    PostgreSQLは、TCP / IPだけでなく、UNIXソケットを介した接続も受け入れる場合があります。 -h localhost 引数はpsqlに伝えます UNIXソケットではなくTCP接続を使用する。

    現在の docker-entrypoint.sh バージョン、あなたは、/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を実行できます。 成功します。




    1. SPSSとPHP/MySQLの統合

    2. Oracle Linux Automation Manager(別名「OracleAnsibleTower」)のインストール方法

    3. GoogleAppsScriptでストアドプロシージャを実行する

    4. SqlAlchemy Postgres JSON疑問符演算子でフィルタリングする方法は?