2017-07-04 79 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中,这将有助于连接。 –