LoginSignup
90
43

More than 3 years have passed since last update.

PostgresのDockerImageに変更があって起動ができなくなった話

Last updated at Posted at 2020-02-17

はじめに

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)起動した際に急に動かなくなる自体が発生。

docker-compose.yml(抜粋)
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にすることで対応しました。

本来はきちんとパスワードを設定した方が良いです。

docker-compose.yml(抜粋)
services:
  db:
    image: postgres
    environment:
      POSTGRES_HOST_AUTH_METHOD: 'trust'
      # POSTGRES_PASSWORD: 'postgres' ← envファイルに外出ししても良い

終わり

今回は

  • パスワードが設定されていなかった
  • ちょうど週末にimageを整理した際にpostgresのimageを一回削除していた

ことからこの状況が発生してしまいました。

開発環境であってもきちんとパスワードを設定しておく、imageのversionをロックしておくことは大事だと言う教訓ですね。
(ちなみにpostgresのバージョンをpostgres:9.5.10で指定した場合は発生せず)

90
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
90
43