はじめに
DockerでLocalの開発環境としてPostgresの環境を構築していたんですが、
急に動かなくなってしまったのでメモがわりに残しておきます。
環境
$ docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:22:34 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:29:19 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
問題発生
docker-composeでPostgresのimageを設定してLocalで開発環境を構築していました。
ところが今日(2020/02/17)起動した際に急に動かなくなる自体が発生。
services:
db:
image: postgres
docker-compose up
で起動した際に以下のエラーが出ました。
Error: Database is uninitialized and superuser password is not specified.
You must specify POSTGRES_PASSWORD for the superuser. Use
"-e POSTGRES_PASSWORD=password" to set it in "docker run".
You may also use POSTGRES_HOST_AUTH_METHOD=trust to allow all connections
without a password. This is *not* recommended. See PostgreSQL
documentation about "trust":
https://www.postgresql.org/docs/current/auth-trust.html
調査
エラーの内容をみる限りはスーパーユーザーのパスワードが指定されていなかったことに起因するもので、
対応すべき内容も書いてあります。
一応該当のエラーで検索してみると以下のページにたどり着きました。
ちょうどこのページも3日前にopenされた内容です。
どうやら以下のコミットが5日ほど前にマージされた影響のよう。
該当のコミット
マージされたPR
今回は開発環境でパスワードが設定されていない状態でDBに接続していたので、
上記の改修で繋がらなくなってしまった模様。
解決
今回は自分のlocal環境で開発する際に確認のために一度だけ繋がればよかったので
POSTGRES_HOST_AUTH_METHOD
オプションをtrust
にすることで対応しました。
本来はきちんとパスワードを設定した方が良いです。
services:
db:
image: postgres
environment:
POSTGRES_HOST_AUTH_METHOD: 'trust'
# POSTGRES_PASSWORD: 'postgres' ← envファイルに外出ししても良い
終わり
今回は
- パスワードが設定されていなかった
- ちょうど週末にimageを整理した際にpostgresのimageを一回削除していた
ことからこの状況が発生してしまいました。
開発環境であってもきちんとパスワードを設定しておく、imageのversionをロックしておくことは大事だと言う教訓ですね。
(ちなみにpostgresのバージョンをpostgres:9.5.10
で指定した場合は発生せず)