質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Ruby on Rails

    7721questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Docker

    811questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

(再質問)docker/PG::ConnectionBad

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 958

PartyKids

score 57

本日dockerの教科書を買って、分からない所は読み飛ばして読んだのですが、エラーを解決する事が出来ないので、再度質問させてください。

開発環境

mac os: sierra 10.12.4
IDE: Rubymine(お試し)

$ docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Tue Mar 28 00:40:02 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:00:50 2017
 OS/Arch:      linux/amd64
 Experimental: true

実行手順

User/***/workspaceディレクトリ下で、Quick start:compose and rails(リンク内容)の指示に従って、Yay! you r on rails.を表示させる。

**Dockerfile**
FROM ruby:2.3.3
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

**Gemfile**
source 'https://rubygems.org'
gem 'rails', '5.0.0.1'

**docker-compose.yml**
version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

**config/database.yml**
development: &default
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: postgres
  password:
  host: db

test:
  <<: *default
  database: myapp_test

エラー

ターミナル等何もいじらずに

workspace ****$ rails g controller StaticPages home help
workspace ****$ rails test
/Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:671:in `initialize': could not translate host name "db" to address: nodename nor servname provided, or not known (PG::ConnectionBad)
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:671:in `new'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:671:in `connect'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:217:in `initialize'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:37:in `new'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:37:in `postgresql_connection'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:721:in `new_connection'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:765:in `checkout_new_connection'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:744:in `try_to_checkout_new_connection'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:705:in `acquire_connection'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:501:in `checkout'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:364:in `connection'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:875:in `retrieve_connection'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_handling.rb:128:in `retrieve_connection'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_handling.rb:91:in `connection'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:1041:in `needs_migration?'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:576:in `load_schema_if_pending!'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:591:in `block in maintain_test_schema!'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:822:in `suppress_messages'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:596:in `method_missing'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/migration.rb:591:in `maintain_test_schema!'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/test_help.rb:15:in `<top (required)>'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `block in require'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
        from /Users/****/workspace/test/test_helper.rb:3:in `<top (required)>'
        from /Users/****/workspace/test/controllers/static_pages_controller_test.rb:1:in `require'
        from /Users/****/workspace/test/controllers/static_pages_controller_test.rb:1:in `<top (required)>'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/test_unit/test_requirer.rb:11:in `require'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/test_unit/test_requirer.rb:11:in `block in require_files'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/test_unit/test_requirer.rb:10:in `each'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/test_unit/test_requirer.rb:10:in `require_files'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/test_unit/minitest_plugin.rb:76:in `plugin_rails_init'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:80:in `block in init_plugins'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:78:in `each'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:78:in `init_plugins'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:129:in `run'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/test.rb:9:in `<top (required)>'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:138:in `require'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:138:in `require_command!'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:95:in `test'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
        from /Users/****/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands.rb:18:in `<top (required)>'
        from bin/rails:4:in `require'
        from bin/rails:4:in `<main>'

エラー時のコンテナの状態

workspace ****$ docker-compose ps
     Name                    Command               State           Ports          
---------------------------------------------------------------------------------
workspace_db_1    docker-entrypoint.sh postgres    Up      5432/tcp               
workspace_web_1   bundle exec rails s -p 300 ...   Up      0.0.0.0:3000->3000/tcp 

やった事や考えた事等

エラーをググった所、postgresqlのパスが正しいですか?という回答を見つけたのですが、/var/lib/にdockerディレクトリ(イメージとコンテナ)が見つかりませんでした。また、ローカル(/usr/local/Cellar/postgresql/)にrubyとpostgresqlをインストールしているため、イメージをhubからプルする場合と違って、別途パスの指定が必要なのか?

本を読んだりググったりと、思いつく事を片っ端からやってみたのですが解決出来ないので、お力添えいただけますでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

User/***/workspaceディレクトリ下で、Quick start:compose and rails(リンク内容)の指示に従って、Yay! you r on rails.を表示させる。

とありますが、「Yay! you r on rails.」が正常に表示されることを確認してから、「エラー」の操作を行ったということでよろしいでしょうか?

config/database.ymlはコンテナ内で実行するための設定になっています。ホスト側で実行するとdbを見つけられないため、データベースの接続エラーになります。

以下のようにコンテナ内で実行する必要があると思います。

$ docker-compose run web rails g controller StaticPages home help
Expected string default value for '--helper'; got true (boolean)
Expected string default value for '--assets'; got true (boolean)
      create  app/controllers/static_pages_controller.rb
       route  get 'static_pages/help'
       route  get 'static_pages/home'
      invoke  erb
      create    app/views/static_pages
      create    app/views/static_pages/home.html.erb
      create    app/views/static_pages/help.html.erb
      invoke  test_unit
      create    test/controllers/static_pages_controller_test.rb
      invoke  helper
      create    app/helpers/static_pages_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/static_pages.coffee
      invoke    scss
      create      app/assets/stylesheets/static_pages.scss

$ docker-compose run web rails test
/myapp/db/schema.rb doesn't exist yet. Run `rails db:migrate` to create it, then try again. If you do not intend to use a database, you should instead alter /myapp/config/application.rb to limit the frameworks that will be loaded.
Run options: --seed 11517

# Running:

..

Finished in 0.980967s, 2.0388 runs/s, 2.0388 assertions/s.

2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

リンク先に書いてある通りにやって10分でできました。dockerは便利ですね。

【追記】

以下のように--rmをつけないとゴミコンテンが増えてしまいます。

$ docker-compose run --rm web rails g controller StaticPages home help
$ docker-compose run --rm web rails test
$ docker-compose ps
   Name                  Command               State           Ports
-----------------------------------------------------------------------------
rails_db_1    docker-entrypoint.sh postgres    Up      5432/tcp
rails_web_1   bundle exec rails s -p 300 ...   Up      0.0.0.0:3000->3000/tcp

$ docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS                    NAMES
52933a58373c        rails_web             "rails test"             13 minutes ago      Exited (0) 13 minutes ago                            rails_web_run_4
2b8ce1178dc0        rails_web             "rails g controlle..."   14 minutes ago      Exited (0) 14 minutes ago                            rails_web_run_3
5c03a4144fe9        rails_web             "rake db:create"         16 minutes ago      Exited (0) 16 minutes ago                            rails_web_run_2
718ffb33ba83        rails_web             "bundle exec rails..."   16 minutes ago      Up 7 minutes                0.0.0.0:3000->3000/tcp   rails_web_1
6103f114c226        462714f32758          "rails new . --for..."   20 minutes ago      Exited (0) 20 minutes ago                            rails_web_run_1
f902caef094a        postgres              "docker-entrypoint..."   22 minutes ago      Up 7 minutes                5432/tcp                 rails_db_1

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/02 12:58

    言葉足らずですが回答していただき、ありがとうございます。
    わざわざ再現してくださり、本当にありがとうございます!!!
    出来る事ができました!!

    >config/database.ymlはコンテナ内で実行するための設定になっています。ホスト側で実行するとdbを見つけられないため、データベースの接続エラーになります。
    そういう事だったんですね。

    workspace下は、イメージから作成されたコンテナであるため、普通に作業すればコンテナが書き換わると思っていました。なので、db connection error等、見当違いのQ&Aばかりググっていました。毎回、コンテナの中身を書き換えますよ!というコマンドを打たないといけないんですね!
    dockerのデメリットとして、docker-composeをたくさん打たなきゃいけない。と書かれていましたが、そういう事だったんですね

    解決していただき、本当にありがとうございました!!

    キャンセル

  • 2017/04/02 13:29

    rails環境がコンテナ内にあるため、rakeやrailsコマンドを実行する場合は、docker-composeをつけて実行することになります。

    docker-compose.ymlの設定でカレントディレクトリをコンテナ内のmyappにマウントしているので、コマンドを実行して作成/変更されるファイルはカレントディレクトリ内にあるものになります。

    コンテナ内でコマンドはrootで実行されており、カレントディレクトリ内に作成されるフィアルのオーナはrootなるため、新規作成されたファイルを編集する場合は`sudo -R $HOME:$HOME .`でファイルのオーナを変更する必要があります。

    キャンセル

  • 2017/04/02 17:22

    聞いた事以上に教えていただき、ありがとうございます!
    >>rails環境がコンテナ内にあるため、rakeやrailsコマンドを実行する場合は、docker-composeをつけて実行することになります。
    これから、気をつけます!

    >>コンテナ内でコマンドはrootで実行されており、カレントディレクトリ内に作成されるフィアルのオーナはrootなるため、新規作成されたファイルを編集する場合は`sudo -R $HOME:$HOME .`でファイルのオーナを変更する必要があります。
    すみません、あまりよく分からないです。。。。
    workspace $ cd app/views/static_pages
    static_pages $ touch about.html.erb
    static_pages $ ls -l
    rw-r--r-- 1 **** staff 14 Apr 2 17:12 about.html.erb
    っと、root権限ではなかったです。

    tkmtmktさんが、仰っていることは、docker-composeを使ってbash操作?をした時に作成されたファイルはroot権限ですよ!ってことですか?

    無知ですみませんが、よろしくお願いいたします!

    キャンセル

  • 2017/04/04 06:45

    すいません。オーナ変更の件はホスト環境がLinuxのときの話で、PartyKidsさんはMacを使用しているようなので関係ないことでした。(MacだとDocker ToolsBoxとかでしょうか)

    ちなみにやった事や考えた事等に「/var/lib/にdockerディレクトリ(イメージとコンテナ)が見つかりませんでした。」とありますが、Docker ToolboxはVirtualBox仮想マシン上で実行するLinux上でDockerを動かすものなので、MacからはVirtualBox仮想マシンのイメージしか見えないです。
    /var/lib/dokcerはVirtualBox仮想マシン上のLinuxにあります。

    キャンセル

  • 2017/04/04 17:01

    返信ありがとうございます!
    そういう事だったんですね。公式リファレンスに以下が書かれていました。
    >>If you are running Docker on Linux, the files rails new created are owned by root. This happens because the container runs as the root user. Change the ownership of the new files.
    sudo chown -R $USER:$USER .

    いつも補足情報ありがとうございます!この補足情報のおかげで、勉強が捗っています!
    正しいのか分からないですが、仮想マシンにローカルとは違うバージョンのrubyを入れるからrbenvが必要なのかな?っと、補足情報を手がかりに様々なことを勉強する事ができました。

    稚拙な質問文から助けて頂き本当にありがとうございました!
    今後ともよろしくお願いいたします!!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Ruby on Rails

    7721questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Docker

    811questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです