Ошибка авторизации, которую вы получили, поможет много!
Я разжег изображение Postgres с вашими аргументами:
docker run --name db -d -e POSTGRES_PASSWORD=docker -e POSTGRES_USER=docker postgres
Тогда я exec'ed в:
docker exec -it db psql -U docker user
psql: FATAL: database "user" does not exist
Я получаю сообщение об ошибке вы ожидаете, потому что у меня есть доверие аутентификации:
docker exec -it db cat /var/lib/postgresql/data/pg_hba.conf | grep -v '^#'
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
host all all 0.0.0.0/0 md5
Чтобы имитировать ваш веб-контейнер, я запустил еще один экземпляр контейнера postgres и свяжите контейнер db, а затем подключите его обратно к контейнеру db:
[email protected] /tmp/i $ docker run --rm --name web --link db:db -it postgres psql -h db -Udocker user
Password for user docker:
psql: FATAL: password authentication failed for user "docker"
Я получаю ошибку аутентификации при вводе неправильного пароля. Но если я ввешу правильный пароль:
[email protected] /tmp/i $ docker run --rm --name web --link db:db -it postgres psql -h db -Udocker user
Password for user docker:
psql: FATAL: database "user" does not exist
Все кажется, что работает правильно. Я положил все это в файл YAML и тестирование его таким образом, а также:
web:
image: postgres
command: sleep 999
ports:
- "62576:62576"
links:
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: docker
POSTGRES_USER: docker
затем обжигают его с Докер-композе:
[email protected] /tmp/i $ docker-compose -f dc.yaml up
Creating i_db_1...
Creating i_web_1...
Attaching to i_db_1, i_web_1
db_1 | ok
db_1 | creating template1 database in /var/lib/postgresql/data/base/1 ... ok
db_1 | initializing pg_authid ... ok
db_1 | initializing dependencies ... ok
db_1 | creating system views ... ok
db_1 | loading system objects' descriptions ... ok
db_1 | creating collations ... ok
db_1 | creating conversions ... ok
db_1 | creating dictionaries ... ok
db_1 | setting privileges on built-in objects ... ok
db_1 | creating information schema ... ok
db_1 | loading PL/pgSQL server-side language ... ok
db_1 | vacuuming database template1 ... ok
db_1 | copying template1 to template0 ... ok
db_1 | copying template1 to postgres ... ok
db_1 | syncing data to disk ... ok
db_1 |
db_1 | WARNING: enabling "trust" authentication for local connections
db_1 | You can change this by editing pg_hba.conf or using the option -A, or
db_1 | --auth-local and --auth-host, the next time you run initdb.
db_1 |
db_1 | Success. You can now start the database server using:
db_1 |
db_1 | postgres -D /var/lib/postgresql/data
db_1 | or
db_1 | pg_ctl -D /var/lib/postgresql/data -l logfile start
db_1 |
db_1 |
db_1 | PostgreSQL stand-alone backend 9.4.1
db_1 | backend> statement: CREATE DATABASE "docker" ;
db_1 |
db_1 | backend>
db_1 |
db_1 | PostgreSQL stand-alone backend 9.4.1
db_1 | backend> statement: CREATE USER "docker" WITH SUPERUSER PASSWORD 'docker' ;
db_1 |
db_1 | backend>
db_1 | LOG: database system was shut down at 2015-04-12 22:01:12 UTC
db_1 | LOG: database system is ready to accept connections
db_1 | LOG: autovacuum launcher started
^Z
[1]+ Stopped docker-compose -f dc.yaml up
[email protected] /tmp/i $ bg
вы можете увидеть, что имя пользователя и пароль были созданы. Я EXEC в:
[email protected] /tmp/i $ docker exec -it i_web_1 psql -Udocker -h db user
Password for user docker:
psql: FATAL: password authentication failed for user "docker"
[email protected] /tmp/i $
db_1 | FATAL: password authentication failed for user "docker"
db_1 | DETAIL: Connection matched pg_hba.conf line 95: "host all all 0.0.0.0/0 md5"
[email protected] /tmp/i $ docker exec -it i_web_1 psql -Udocker -h db user
Password for user docker:
psql: FATAL: database "user" does not exist
db_1 | FATAL: database "user" does not exist
Так что единственное, что я могу думать о том, что вы пытаетесь подключиться к базе данных от хоста, а не веб-контейнера? Или ваш веб-контейнер не использует «db» в качестве хоста для подключения? Ваше определение для веб-контейнера не содержит ошибок, которые я вижу.
'@ db' подразумевает удаленное соединение и ничего не говорит о том что вы разрешили их в' postgresql.conf' и 'pg_hba.conf', особенно последний. Не имеет смысла не включать непосредственно сообщение об ошибке auth в этом вопросе. –
У меня очень похожая проблема. Я сделал необходимые изменения в 'pg_hba.conf', чтобы разрешить удаленные подключения. Проблема заключается в том, что «docker-compose» игнорирует переменную окружения 'POSTGRES_PASSWORD' – jap1968