0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Docker】WARNING: The POSTGRES_USER variable is not set. Defaulting to a blank string.の解決法

Posted at

postgresを使用しています。

docker-compose up -dをしたところ次のエラー。

WARNING: The POSTGRES_USER variable is not set. Defaulting to a blank string.
WARNING: The POSTGRES_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The HOST_OS_DATABASE_PORT variable is not set. Defaulting to a blank string.
WARNING: The HOST_OS_RAILS_PORT variable is not set. Defaulting to a blank string.
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.web.ports is invalid: Port ranges don't match in length
services.db.ports is invalid: Port ranges don't match in length

調べてみたがなし。

エラー文を訳してみる。

・使えるPOSTGRES_USERがセットされてない。
・POSTGRES_PASSWORDがセットされてない。
・The HOST_OS_DATABASE_PORTがセットされてない。
・The HOST_OS_RAILS_PORTがセットされてない。

パスワード関連なのでとりあえずdatabase.ymlとdocker-compose.yml、.envをチェック。

config/database.yml
default: &default
adapter: postgresql
encoding: unicode

ご自身のpostgresqlに登録してあるユーザ名にしてください。

username: <%= ENV.fetch('POSTGRES_USER') %>
password: <%= ENV.fetch('POSTGRES_PASSWORD') %> # docker-composeのPOSTGRES_PASSWORDと揃える。
pool: 5
host: <%= ENV.fetch('DATABASE_HOST') %> # docker-composeのサービス名にします。
port: <%= ENV.fetch('DATABASE_PORT') { 5432 } %>

development:
<<: *default
database: portfolio_development

test:
<<: *default
database: portfolio_test

production:
<<: *default
database: portfolio

docker-compose.yml

version: '3'
services:
db:
image: postgres

秘匿情報は環境変数を定義するファイルにまとめる。

env_file:

  • ./.env

envを読み込んだだけではcomposeの中でしか公開されないためenvironmentで宣言

environment:

# こことdatabase.ymlのpasswordは揃える。

POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:

  • db-data:/var/lib/postgresql/data

ホスト:コンテナでポートフォアワーディング。

ports:

  • ${HOST_OS_DATABASE_PORT}:5432
    web:
    build: .
    command: bash -c "bin/rails db:create && bin/rails db:migrate && rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:

ここの右辺とDockerfileのWORKDIRを揃える(大文字小文字が違いました。)

  • .:/Portfolio

あまり変更のない部分をマウントしておくことで起動を早める。

  • bundle-data:/Portfolio/vendor/bundle
  • bundle:/Portfolio/.bundle
  • public:/Portfolio/public
  • tmp:/Portfolio/tmp
  • log:/Portfolio/log
    ports:
  • ${HOST_OS_RAILS_PORT}:3000
    depends_on:
  • db
  • chrome
    chrome:
    image: selenium/standalone-chrome:3.141.59-dubnium
    ports:
  • 4444:4444
    volumes:
    db-data:
    bundle-data:
    bundle:
    public:
    tmp:
    log:

原因

.envを見たところ、それぞれ環境変数を指定していなかったことが判明。

試しに登録したPOSTGRES_USERの値を.envで指定してみたところ、

WARNING: The POSTGRES_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The HOST_OS_DATABASE_PORT variable is not set. Defaulting to a blank string.
WARNING: The HOST_OS_RAILS_PORT variable is not set. Defaulting to a blank string.
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.web.ports is invalid: Port ranges don't match in length
services.db.ports is invalid: Port ranges don't match in length

警告が一つ減った。したがって残り3つも登録した値を.envで指定する。

そしてdocker-compose up -d。

S:Portfolio sahota0701nemoto$ docker-compose up -d
Creating network "portfolio_default" with the default driver
Creating volume "portfolio_db-data" with default driver
Creating volume "portfolio_bundle-data" with default driver
Creating volume "portfolio_bundle" with default driver
Creating volume "portfolio_public" with default driver
Creating volume "portfolio_tmp" with default driver
Creating volume "portfolio_log" with default driver
Creating portfolio_db_1 ... done
Creating portfolio_chrome_1 ... done
Creating portfolio_web_1 ... done

通った。

推測ですが人によってはdocker内でpostgresユーザを作らなければ行けないのでPostgresqlのユーザを作成する方法についてはこちらの記事にまとめてあります。

次に遭遇したエラーはこちらの記事です

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?