LoginSignup
0
0

More than 1 year has 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