私はpostgresコンテナをセットアップしようとしていますが、postgresログインをセットアップしたい:
POSTGRES_USER: docker
POSTGRES_PASSWORD: docker
だから私はdocker-compose.ymlを次のように作成しました
web:
build: .
ports:
- "62576:62576"
links:
- redis
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: docker
POSTGRES_USER: docker
redis:
image: redis
Dbセクションを次のように宣言する環境変数の他の構文も試しました。
db:
image: postgres
environment:
- POSTGRES_PASSWORD=docker
- POSTGRES_USER=docker
ただし、さまざまな接続文字列を使用してpostgresデータベースに接続しようとすると、何らかの理由でこれらのオプションはどちらも機能しないようです:
postgres://postgres:postgres@db:5432/users
postgres://postgres:docker@db:5432/users
postgres://docker:docker@db:5432/users
ユーザーデータベースがないと文句を言うのではなく、それらはすべて私に認証の失敗を与えます。
取得した認証エラーは大いに役立ちます!
あなたの引数でpostgresイメージを起動しました:
docker run --name db -d -e POSTGRES_PASSWORD=docker -e POSTGRES_USER=docker postgres
それから私は実行しました:
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
Webコンテナをシミュレートするために、postgresコンテナの別のインスタンスを実行し、dbコンテナをリンクしてから、dbコンテナに接続し直します。
core@ku1 /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"
間違ったパスワードを入力すると、認証エラーが発生します。しかし、正しいパスワードを入力すると:
core@ku1 /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
それからdocker-composeで起動しました:
core@ku1 /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
core@ku1 /tmp/i $ bg
ユーザーとパスワードが作成されたことがわかります。私が実行する:
core@ku1 /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"
core@ku1 /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"
core@ku1 /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
だから私が考えることができる唯一のことは、あなたがホストからデータベースに接続しようとしているということであり、Webコンテナではありませんか?または、Webコンテナが「db」を接続先ホストとして使用していないのですか? Webコンテナの定義には、表示されるエラーは含まれていません。
私はこれにしばらく苦労し、受け入れられた答えに運がなかった、私は最終的にコンテナを削除することで動作するようになりました:
docker-compose rm postgres
そして、volume:
docker volume rm myapp_postgres
その後、私は新鮮なdocker-compose up
私が見た CREATE ROLE
fly by、私はと仮定しますは最初のup
で見逃されたものです。
この理由は here 、postgresのDocker公式イメージのGitリポジトリで詳しく説明されています。
私は同じ問題を抱えていましたが、私の場合は単一のコマンドで問題が修正されました:
docker-compose up --force-recreate
同様の状況がありました。 @Gregからの回答に続いて、docker-compose upを実行し、環境変数を取得しました。
それ以前は、docker-compose runを使用していましたが、docker-compose exec task envを実行することで証明された環境変数を取得していませんでした。奇妙なことに、docker-compose run task envは、期待していた環境変数を示していました。