PostgreSQLのCI / CDパイプラインが「データベースが初期化されておらず、スーパーユーザーのパスワードが指定されていない」エラーで失敗する


18

CI / CD用のPosgreSQLでBitbucketパイプラインを使用しています。このドキュメントによると、PostgreSQLサービスは次のように説明されbitbucket-pipelines.ymlています。

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine

今までは問題なく動作しました。しかし、最新のパイプラインはすべて次のエラーで失敗しました:

   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

どうすれば修正できますか?このbitbucket-pipelines.ymlようなエラーの原因である可能性のあるファイルの変更はありませんでした。

回答:


17

理由は、Dockerイメージの更新(githubの問題)のようです。最新バージョンでは、どこからでもパスワードなしでDBに接続できません。したがって、ユーザー名/パスワードを指定する必要があります:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
         POSTGRES_DB: pipelines
         POSTGRES_USER: test_user
         POSTGRES_PASSWORD: test_user_password

または、パスワードを使用したくない場合は、POSTGRES_HOST_AUTH_METHOD=trust環境変数を設定するだけです。

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
        POSTGRES_HOST_AUTH_METHOD: trust

4

これは、約1週間前のごく最近の変更です。それを回避する1つの方法は、最新ではないにあなたのPostgresのバージョンをハードコーディングすることで、例えばに変更しpostgres:9.5.18たりpostgres:9.5.20-alpine

別の方法は、偽のパスワードを渡すことです:

services:
  db:
    image: postgres
    ports:
      - "8001:5432"
    environment:
      - POSTGRES_PASSWORD=fake_password

ここの議論を参照してください:https : //github.com/docker-library/postgres/issues/681


1

初めてDockerを介してDjangoをPostgreSQLに接続する際に問題が発生した場合はPOSTGRES_HOST_AUTH_METHOD: trustdocker-compose.ymlファイルにを追加します。

db: image: postgres:11 environment: POSTGRES_HOST_AUTH_METHOD: trust

これで接続の問題が解決しました。

「これはお勧めできません。「trust」に関するPostgreSQLのドキュメントを参照してください:https : //www.postgresql.org/docs/current/auth-trust.html


これが推奨されない場合、なぜそれを提案するのですか?推奨されていないことを警告するのは良いことですが、それを提案する理由や、回避策を提供することもできます。間違いなく役立ちます。ただの意見。
ErroCode-112猿が

これを回避する良い方法は、スーパーユーザーにPOSTGRES_PASSWORDを指定することです。「-e POSTGRES_PASSWORD = password」を使用して、「
docker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.