2016-06-22 52 views
4

我開始使用使用Docker的現有Rails項目。我已經使用Rails很長一段時間,但從來沒有Docker。嘗試執行「docker up」時,獲取「FATAL:role」根目錄「不存在」

後,我做了我docker build .嘗試做一個docker-compose up,但我得到:

FATAL:角色 「根」 不存在 /usr/local/bundle/gems/activerecord-4.2.5.2 /lib/active_record/connection_adapters/postgresql_adapter.rb:661:in`救援連接「:FATAL:角色‘根’不存在(的ActiveRecord :: NoDatabaseError)

在我看來,該泊塢窗機可能試圖連接到數據庫作爲root用戶,但沒有角色稱爲root,所以連接是正確的失敗。

我不知道的是爲什麼Docker顯然試圖連接到數據庫作爲root以及如何讓它使用正確的用戶。

這裏是我的database.yml

development: 
    database: my_app_development 
    adapter: postgresql 
    encoding: unicode 
    pool: 5 

任何幫助表示讚賞。

編輯:這是我的docker-compose.yml

web: 
    build: . 
    volumes: 
    - .:/my_app 
    ports: 
    - "3000:3000" 
    links: 
    - postgres 
    - redis 
    - mailcatcher 
    env_file: 
    - 'config/application.yml' 
postgres: 
    image: postgres:9.4 
    ports: 
    - "5432" 
    env_file: 
    - 'config/database.yml' 
redis: 
    image: redis:3.0.6 
mailcatcher: 
    image: schickling/mailcatcher 
    ports: 
    - "1080:1080" 
+1

你的docker-compose.yml是怎麼樣的?您是否使用單獨的容器來存放postgres? –

+0

嘿Lekan!我編輯了我的答案,包括'docker-compose.yml'。我不知道如何知道我是否爲PostgreSQL使用單獨的容器。 –

+0

Yea Jase!所以看起來你使用docker-compose.yml中的不同容器。我想你會用postgres的env vars更新撰寫文件。 –

回答

2

您可能需要按照以下步驟更新您的撰寫和數據庫YML。預計的db用戶和密碼在database.yml。此外,你可以讓這是一個環境變量。但首先嚐試postgres數據庫泊塢窗圖像的默認值如下;

database.yml

development: 
    database: my_app_development 
    adapter: postgresql 
    encoding: unicode 
    pool: 5 
    username: postgres 
    password: 
    host: postgres(db name in docker-compose.yml) 

docker-compose.yml

 web: 
     build: . 
     command: bundle exec rails s -p 3000 -b '0.0.0.0' 
     volumes: 
      - .:/my_app 
     ports: 
      - "3000:3000" 
     links: 
      - postgres 
      - redis 
      - mailcatcher 
     postgres: 
     image: postgres:9.4 
     ports: 
      - "5432" 
     redis: 
     image: redis:3.0.6 
     mailcatcher: 
     image: schickling/mailcatcher 
     ports: 
      - "1080:1080" 

我不認爲你想保持

env_file: 
     - 'config/database.yml' 

env_file: 
     - 'config/application.yml' 

然後用docker-compose run web rake db:create

創建數據庫我添加命令指示,因爲我不知道你的Dockerfile是什麼樣子。但是,如果您已成功構建應用程序圖像,並且可以將其刪除,並運行docker-compose up

+0

仍然得到相同的錯誤:( –

+0

我更新了答案:-) –

1

如果沒有在database.yml中設置明確的用戶,它將嘗試使用root用戶,因爲這是用戶postgres在容器中運行的相同用戶。爲了解決這個問題,可以嘗試設置你的database.yml爲:

development: 
    database: my_app_development 
    adapter: postgresql 
    encoding: unicode 
    pool: 5 
    username: postgres 

注意添加用戶名領域。

相關問題