LoginSignup
0
0

More than 1 year has passed since last update.

DockerエラーIs the server running on host "localhost" (127.0.0.1) and acceptingTCP/IP connections on port 5432?の解決法 Dockerの各種削除コマンドも紹介

Posted at

postgresを使用しています。

ローカルでdockerを立ち上げ、 docker-compose run web bin/rake db:createをしたところ次のエラー。

エラー文
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
Couldn't create 'portfolio_development' database. Please check your configuration.
rake aborted!
PG::ConnectionBad: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?

訳すと
・hostである”ローカルホストに接続できないよ”
・port 5432のアクセスを許可してる?

したがってdocker-compose.ymlとconfig/database.ymlを見てみる。

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:

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

後、.envにそれぞれ記載しているためそちらも確認。

見つけた。

config/database.ymlの中のDATABASE_HOSTの値はdocker-compose.ymlで記載されているサービス名にしなければ行けなかった。

.envではlocalhostにしていたことが原因です。

dbにしなければいけないので、.envにdbと記載。
そしてdocvkerが過去のvolumeを参照しないように全て削除。

↓順番にコマンドを入力。

$ docker system prune #停止コンテナ、タグ無しイメージ、未使用ボリューム、未使用ネットワーク一括削除
$ docker container prune #停止コンテナ一括削除
$ docker rm -f docker ps -a -q #全コンテナ一括削除
$ docker image prune #未使用イメージ一括削除
$ docker rmi docker images -f "dangling=true" -q #タグ無しイメージ一括削除
$ docker volume prune #未使用ボリューム一括削除
$ docker network prune #未使用ネットワーク一括削除

これでtestの部分のhostがdbになります。

そしてdockerを立ち上げる。

$ docker-compose build
$ docker-compose up -d #途中からDockerを立ち上げる場合はここまででよい。
$ docker-compose run web rake db:create
または
$ docker-compose run web bin/rake db:create

いけた。

エラー文から推測して今回のやり方で解決しない方もいると思うので、根気強く解決法を探してみてください。

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