web-dev-qa-db-ja.com

Dockerコンテナー内にPostgreSQLをインストールする

私はいくつかの異なるチュートリアルと公式のチュートリアルに従っていますが、コンテナ内にPostgreSQLをインストールしようとするたびに、次のメッセージが表示されます

psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

SOおよびインターネット全体でいくつかの質問を調べましたが、うまくいきませんでした。

19
Kris Winiarski

問題は、アプリケーション/プロジェクトが(Dockerコンテナーではなく)ホストマシンのpostgresソケットファイルにアクセスしようとしていることです。

これを解決するには、-pフラグを使用してpostgresコンテナのポートを設定するときに、tcp/ip接続を明示的に要求するか、-vフラグを使用してUNIXソケットをホストマシンと共有する必要があります。

:注:-vまたは--volume=フラグを使用すると、ホストマシンとdockerコンテナーの間でスペースを共有することになります。つまり、ホストマシンにpostgresがインストールされており、その実行中に問題が発生する可能性があります。

以下では、tcp/ipとunixソケットの両方からアクセス可能なpostgresコンテナを実行する方法を示します。また、コンテナにpostgresという名前を付けています。

docker run -p 5432:5432 -v /var/run/postgresql:/var/run/postgresql -d --name postgres postgres

他の解決策もありますが、これが最も適していると思います。最後に、アクセスを必要とするアプリケーション/プロジェクトがコンテナでもある場合は、それらをリンクすることをお勧めします。

12
Vasspilka

デフォルトでは、psqlはUNIXソケットを使用してサーバーに接続しようとしています。そのため、/ var/run/postgresql/.s.PGSQL.5432-UNIXソケット記述子の場所が表示されます。

ポートバインディングを使用してdockerでpostgresql-serverを実行する場合は、TCPソケットを使用するようにpsqlに指示する必要があります。 Host param(--Hostまたは-h):

psql -h localhost [any other params]

5
Timur Milovanov

Dockerコンテナでも機能するはずのエラーを修正する手順を次に示します。 PostgreSQLエラー 'サーバーに接続できませんでした:そのようなファイルまたはディレクトリはありません'

それが何らかの理由で機能しない場合は、Dockerインデックスで参照のために確認できる市販のpostgresql Dockerコンテナが多数あります。 https://index.docker.io/search?q = postgresql

コンテナの多くは、githubの信頼できるリポジトリから構築されています。したがって、ニーズを満たしていると思われるものを見つけた場合は、ソースを確認できます。

Flynnプロジェクトには、チェックアウトする価値のあるpostgresqlアプライアンスも含まれています。 https://github.com/flynn/flynn-postgres

1
toddsampson

FROM postgres:9.6

実行apt-get update && apt-get install -q -y postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6 postgresql-client-common postgresql-common RUN echo postgres:postgres | chpasswd

実行pg_createcluster 9.6 main --start

RUN /etc/init.d/postgresql start

RUN su -c "p​​sql -c \" ALTER USER postgres PASSWORD 'postgres';\"" postgres

0
mohanraj k