1. 程式人生 > >docker 踩坑筆記之 psql: could not connect to server

docker 踩坑筆記之 psql: could not connect to server

param ini thread mas nco nic etc user connect

最近在用docker跑rails,也遇到了一些坑,這裏記錄一下。

首先build項目:

docker-compose build

然後就開始報錯了:

psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

這裏報錯是說找不到 /var/run/postgresql/.s.PGSQL.5432 文件,但我本地運行是沒問題的。於是去找docker從入門到實踐這本書的docker rails 例子, 地址在這裏:發現我的database.yml

文件不對。我的是這樣的:

default: &default
  adapter: postgresql
  encoding: unicode`請輸入代碼`
  # For details on connection pooling,www.97yingyuan.org see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

Rails 默認讀取的數據庫目標是 localhost ,我們需要手動指定容

器的 db 。同樣的,還需要把用戶名修改成和 postgres 鏡像預定的一致。 打開最新生成的 database.yml 文件。用以下內容替換:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: postgres
  host: db

這樣再運行docker-compose build,成功build! 然後再跑起來docker-compose up,悲劇的又報錯了:

ActiveRecord::NoDatabaseError (FATAL: database "heroku_app_development" does not exist

提示沒有創建heroku_app_development數據庫,OK,那就創建一個:

sudo docker ps #列出所有容器
sudo docker exec -it [container ID] /bin/bash #進入postgres
sudo su - postgres #切換到postgres用戶,因為這個用戶有createdb權限
ceratedb heroku_app_development #heroku_app_development 創建完成!

再運行docker-compose up,又報錯:

Migrations are pending. To resolve this issue, run:

    bin/rails db:migrate RAILS_ENV=development

railser應該很熟悉,數據庫遷移,進入web容器:
sudo docker exec -it [container ID] /bin/bash #進入web容器
rails db:migrate #遷移成功!

docker 踩坑筆記之 psql: could not connect to server