web-dev-qa-db-ja.com

Postgresql Dockerロールが存在しません

Postgresのdockerコンテナをダウンロードしました: https://hub.docker.com/r/library/postgres/ で、次の操作を行いました。

$ docker run --name satgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
satgres | "docker-entrypoint.s…" | 5 seconds ago | Up 6 seconds | 0.0.0.0:5432->5432/tcp | satgres
$ docker exec -it c8f1b22cc41e /bin/bash        
# psql -U postgres
psql (10.1)
postgres=# CREATE DATABASE mytest;
postgres=# \password postgres
postgres=# CREATE ROLE ming WITH LOGIN PASSWORD 'pass1234';
postgres=# ALTER ROLE ming CREATEDB;
postgres=# CREATE DATABASE sjk;
postgres=# GRANT ALL PRIVILEGES ON DATABASE youtube TO ming;
postgres=# \connect sjk
youtube=# ALTER ROLE ming lOGIN;  

私の計画は、Djangoのdockerでこのデータベースを使用することなので、最初に接続できるかどうかを確認したいのですが、できません。

$ psql -h localhost -p 5432 -U postgres
$ psql: FATAL:  role "postgres" does not exist
$ psql -h localhost -p 5432 -U ming
$ psql: FATAL:  role "ming" does not exist

PSequal.appでも同じことを行い、同じことを言っています、ImはMac High Sierraで実行しています。

このエラーが発生するのはなぜですか?役割が存在するか、少なくとも私にはそう思われます...

10
jupiar

問題は非常に単純だったので、私のコンピューターは、_:5432_で(Docker内ではなく)まだ実行されていることに気付いていなかったPostgresのインスタンスを既に実行していました。

_$ lsof -n -i:5432 | grep LISTEN
_

だから https://Gist.github.com/sgnl/609557ebacd3378f3b72 でインストールしたことを思い出した

_$ pg-stop
_

そして、Dockerインスタンスへの接続に問題はありませんでした。

編集(2019/07/02)

この質問は最近10,000回のビューに合格したため、これが発生した理由について詳しく説明する必要があると考えました。

通常、pythonを使用し、postgresデータベースに接続するためにdockerを介して実行するには、_psycopg2_を_pip3 install psycopg2_経由でインストールする必要がありますが、このコマンドを実行すると次のようになります:

_Error: pg_config executable not found.
_

これは、psycopg2にpostgresライブラリのオペレーティングシステムのインストールが必要だからです。

_yum install postgresql-devel
apt-get install postgresql-client
_

さて、Macでは、brewでも同じことをする必要があります。

_brew install postgresql
_

私が気づかなかった1つのことは、Macでは、上記を行うと必要なライブラリがインストールされるだけでなく、also_:5432_。これはすべてバックグラウンドで行われたため、ポートが使用されていることなどを通知する通常のエラーが表示されないため、これが問題だとは思いませんでした...

24
jupiar

私の場合、問題はpostgresではないスーパーユーザーの使用が原因である可能性があります。 Lhe開発者は、geOrchestra Dockerコンポジションでユーザーgeorchestraを選択しました。 dockerfileから抽出します。

environment:
  - POSTGRES_USER=georchestra

HEALTHCHECK --interval=30s --timeout=30s \
  CMD pg_isready -U $POSTGRES_USER

したがって、オプション「-U georchestra」を使用してコンテナに接続する必要があります。

$ docker exec -it docker_database_1 psql -U georchestra
psql (10.5 (Debian 10.5-1.pgdg90+1))
Type "help" for help.

そしてもちろん、ユーザーpostgresと接続しようとするとエラーが発生します。

docker exec -it docker_database_1 psql -U postgres
psql: FATAL:  role "postgres" does not exist
1
MaxiReglisse