Dockerangular色创build错误 – angular色___不存在

我是Docker的新手,想用Postgres来运行它。 然后我尝试运行其他人但不是我的pythontesting用例。

以下错误告诉我,Docker可能正在努力创buildangular色foo

E sqlalchemy.exc.OperationalError 🙁 psycopg2.OperationalError)致命错误:angular色“foo”不存在

另一个错误:

E psycopg2.OperationalError:致命:angular色“foo”不存在

Postgresql版本: mydb=# SELECT version();

  PostgreSQL 9.6.5 on x86_64-apple-darwin16.7.0, compiled by Apple LLVM version 8.1.0 (clang-802.0.42), 64-bit (1 row) 

Docker版本

 Version 17.06.2-ce-mac27 (19124) 

用这个脚本运行Docker:

 docker run -p 5432:5432 --env POSTGRES_PASSWORD="bar" --env POSTGRES_USER="foo" --env POSTGRES_DB="mydb" postgres 

从脚本输出:如您所见,它说CREATE ROLE

 The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "en_US.utf8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /var/lib/postgresql/data ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting dynamic shared memory implementation ... posix creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok Success. You can now start the database server using: pg_ctl -D /var/lib/postgresql/data -l logfile start WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. waiting for server to start....LOG: could not bind IPv6 socket: Cannot assign requested address HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry. LOG: database system was shut down at 2017-09-26 21:28:17 UTC LOG: MultiXact member wraparound protections are now enabled LOG: database system is ready to accept connections LOG: autovacuum launcher started done server started CREATE DATABASE CREATE ROLE /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/* LOG: received fast shutdown request LOG: aborting any active transactions LOG: autovacuum launcher shutting down waiting for server to shut down....LOG: shutting down LOG: database system is shut down done server stopped PostgreSQL init process complete; ready for start up. LOG: database system was shut down at 2017-09-26 21:28:19 UTC LOG: MultiXact member wraparound protections are now enabled LOG: database system is ready to accept connections LOG: autovacuum launcher started 

编辑

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bbab7eb98fcf postgres "docker-entrypoint..." 10 seconds ago Up 11 seconds 0.0.0.0:5432->5432/tcp hardcore_wilson a6a1e2e313b8 postgres "docker-entrypoint..." 16 minutes ago Exited (0) 6 minutes ago nervous_banach 

看起来像psycopg2试图本地套接字连接。 如果通过TCP连接,您将看到以下exception:

用户“foo”的密码validation失败

并在容器日志中的错误:

 FATAL: password authentication failed for user "foo" DETAIL: Role "foo" does not exist. Connection matched pg_hba.conf line 95: "host all all all md5" 

确保host连接参数已设置。 如果没有设置psycopg2将回退到使用UNIX套接字。

编辑:

看来psycopg2会在通过localhost连接参数时更喜欢UNIX套接字进行连接。 如果有两个postgres运行的实例,一个监听UNIX套接字,另一个监听TCP端口5432,psycopg2将在传递像postgresql://localhost:5432类的URL时通过UNIX域套接字连接。