2016-06-22 13 views
4

Dockerを使用する既存のRailsプロジェクトで作業を開始します。私は長い間レールを使用しましたが、ドッカーは使用しませんでした。「ドッカーアップ」をしようとすると「致命的:ロール」ルートが存在しません

私はdocker build .を実行した後、私はdocker-compose upをしようが、私は得る:

FATAL:役割 "ルート" は /usr/local/bundle/gems/activerecord-4.2.5.2存在しませんFATAL:: `接続での救助" /lib/active_record/connection_adapters/postgresql_adapter.rb:661:in役割は "root"(ActiveRecordは:: NoDatabaseError)が存在しない

ドッカーマシンがあるように私には思えますおそらくrootユーザーとしてデータベースに接続しようとしていますが、という役割はありません、接続が正しく失敗しています。

Dockerが明らかにデータベースに接続しようとしているのは、rootと、正しいユーザーを使用する方法です。

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

すべてのヘルプは高く評価されています

は、ここに私のdatabase.ymlです。

編集:ここに私の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

どのようにあなたのドッキングウィンドウ-compose.ymlがどのように見えるのでしょうか?ポストグルのために別の容器を使用していますか? –

+0

ちょっとレカン!私は 'docker-compose.yml'を含むように私の答えを編集しました。 PostgreSQL用に別のコンテナを使用しているかどうかを知る方法はわかりません。 –

+0

Yea Jase!だから、docker-compose.ymlから別のコンテナを使用しているようです。あなたがpostgres用のenv varsを使って作成ファイルを更新すると思います。 –

答えて

2

次のようにあなたがあなた構成し、データベースYMLを更新する場合があります。 database.ymlにdbユーザーとパスワードが必要です。また、これを環境変数にすることもできます。しかし、まずpostgres db dockerイメージのデフォルトを次のようにしてみてください。

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 build -t app-name .のアプリイメージのビルドが成功した場合は、それを削除して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 

ユーザ名フィールドの追加に注意してください。

0

docker-composeでは、実行間でボリュームを保存しようとします。ユーザーは新しいデータベースでのみ作成されるため、コンテナと関連するボリュームを削除するには、おそらくdocker-compose rm -v databaseが必要です。

さらに、docker-compose up --buildを試してください。

出典:https://github.com/docker-library/postgres/issues/41#issuecomment-167603905

関連する問題