2017-07-04 57 views
0

我創建了Dockerfile從official docker compose website到ruby。我用docker撰寫這個與postgres集成。當docker組裝起來,然後postgresql啓動但我無法連接到這個。主要的問題是在ruby數據庫配置中,因爲我無法更改爲偵聽另一個主機並設置默認用戶。我不知道如何在不更改ruby數據庫配置的情況下連接這兩個容器。Docker撰寫ruby + postgres - 無法連接到postgres

Dockerfile

FROM ruby:2.3.4 
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs 
RUN mkdir /myapp 
WORKDIR /myapp 
ADD Gemfile /myapp/Gemfile 
ADD Gemfile.lock /myapp/Gemfile.lock 
RUN bundle install 
ADD . /myapp 

泊塢窗,構成

version: '3' 
services: 
    db: 
    image: postgres:9.6 
    ports: 
     - "5432:5432" 
    web: 
    build: . 
    ports: 
     - "4000:4000" 
    depends_on: 
     - db 

紅寶石的database.yml

default: &default 
    adapter: postgresql 
    encoding: unicode 
    pool: 5 

development: 
    <<: *default 
    database: project_development 

如果我的網絡conatiner內運行的「捆綁高管耙分貝:創建我得到錯誤:

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"? 

我不知道將連接在一起的env集合。

回答

0

您應該具有以下更新您的database.yml:

database: ENV['DB_NAME'] 
    username: ENV['DB_USERNAME'] 
    password: ENV['DB_PASSWORD'] 

有沒有這樣的事情「默認用戶PG」,所以你必須有正確的權限創建自己的用戶。此外

web: 
    environment: 
    - DB_NAME=rails_development 
    - DB_USERNAME=rails_user 
    - DB_PASSWORD=rails_password 

,你或許想要掛載的本地存儲:

所以,一旦你有容器內創建一個PG的用戶,你可以用一個適當的數據庫設置更新您的碼頭工人,compose.yml文件在你的搬運工,compose.yml的Postgres,以保持數據的容器時,重新啓動:

volumes: 
    - /var/lib/postgresql/data 
+1

有一個名爲'postgres'與Postgres裏的搬運工圖像空口令默認用戶,所以你不必創建它。您的解決方案不能解決問題 –

1

你沒有在你的database.yml指定數據庫主機。將其設置爲db或者只是試試這個database.yml的

development: &default 
    adapter: postgresql 
    encoding: unicode 
    database: project_development 
    pool: 5 
    username: postgres 
    password: 
    host: db 

test: 
    <<: *default 
    database: project_test 
+0

的作者提到的問題我使用了類似的database.yml,一切正常,但我無法更改database.yml。所以這個解決方案不能解決問題。我不知道我必須添加到docker config中,這將有助於連接。 –