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

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

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 6

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Docker

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

Q&A

解決済

1回答

1982閲覧

Docker Composeを使用してRails6+PostgreSQLの環境構築をしているが、PostgreSQLに接続できない。

kan_1689

総合スコア5

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 6

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Docker

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

0グッド

0クリップ

投稿2020/02/24 12:59

前提・実現したいこと

Docker Composeを使用してRails6+PostgreSQLの環境構築をしていて、先ずはRailsサーバーを立ち上げたいのですが、PostgreSQLに上手く接続できません。
下記、該当のソースコードに記載したファイルを作成後に
docker-compose run web rails new . --force --database=postgresqlを実行後、
Gemfileの# Use postgresql as the database for Active Record
gem 'pg', '>= 0.18', '< 2.0'
の部分をgem 'pg', '>= 0.20.0', '< 2.0'に修正し、docker-compose buildを実行しdocker compose run web db:createをした際に下記エラーメッセージが出力されます。
お手数ですが、解決策をご教授ください。

発生している問題・エラーメッセージ

エラーメッセージ $ docker-compose run web rake db:create Starting rails_db_1 ... done /usr/local/bundle/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /usr/local/bundle/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize' is defined here /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/type.rb:27: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/type/adapter_specific_registry.rb:9: warning: The called method `add_modifier' is defined here could not translate host name "db" to address: Name or service not known Couldn't create 'myapp_development' database. Please check your configuration. rake aborted! PG::ConnectionBad: could not translate host name "db" to address: Name or service not known /usr/local/bundle/gems/pg-1.2.2/lib/pg.rb:58:in `initialize' /usr/local/bundle/gems/pg-1.2.2/lib/pg.rb:58:in `new' /usr/local/bundle/gems/pg-1.2.2/lib/pg.rb:58:in `connect' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:46:in `postgresql_connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:889:in `new_connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:933:in `checkout_new_connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:912:in `try_to_checkout_new_connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:873:in `acquire_connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:595:in `checkout' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:439:in `connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1121:in `retrieve_connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_handling.rb:238:in `retrieve_connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_handling.rb:206:in `connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/postgresql_database_tasks.rb:12:in `connection' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/postgresql_database_tasks.rb:21:in `create' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:126:in `create' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:185:in `block in create_current' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:479:in `block (2 levels) in each_current_configuration' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:476:in `each' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:476:in `block in each_current_configuration' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:475:in `each' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:475:in `each_current_configuration' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:184:in `create_current' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/railties/databases.rake:39:in `block (2 levels) in <main>' Tasks: TOP => db:create (See full trace by running task with --trace) ### 該当のソースコード(Gemfile.lockも作成しましたが、特に何も記述せずに作成したので、省略します。) Dockerfile ---------------------------------------- FROM ruby:2.7.0 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev node.js RUN mkdir /myapp WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install COPY . /myapp ---------------------------------------- docker-compose.yml ---------------------------------------- version: '3' 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 ---------------------------------------- Gemfile ---------------------------------------- source 'https://rubygems.org' gem 'rails', '6.0.0.0' ---------------------------------------- ### 試したこと ログに出力されているPG::ConnectionBad: could not translate host name "db" to address: Name or service not knownの箇所を検索して、https://teratail.com/questions/195511に書かれている事など実行したのですが、上手く行きませんでした。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Dockerコンテナ同士の名前解決ができてないです。
Docker-compose v3ではdepends_onは起動順を制御するだけで
ネットワーク部分にはタッチしないのでdepends_on:の部分を links:に変えればそこの部分のエラーは解決すると思います。

すみませんここの部分は勘違いで、リファレンスみたらdepends_onlinksも変わらないみたいです。

postgresのコンテナが立ち上がる前にrailsがアクセスしているならこれをやる必要があるのかもしれません
https://docs.docker.com/compose/startup-order/

あとは
docker network lsでdocker-compose upのあとにネットワークが起動してるかや
docker container lsでpostgresのコンテナが起動してるかなど確認してみてください。

関係ないですがコードやログはマークダウンで適切に囲ってくれないとめちゃくちゃ見づらいです。
エディタに<code>ボタンを押すか
手動で

で囲えばコードブロックになります。

投稿2020/02/28 01:51

編集2020/02/28 06:08
ozroro

総合スコア97

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kan_1689

2020/02/28 11:49

見辛い中、回答してくださって、ありがとうございます。 以後、気をつけます。 links:にしたところ、ワーニングが凄いでてるのですが、上手く行きました。 ``` $ docker-compose run web rake db:create Starting rails_db_1 ... done /usr/local/bundle/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /usr/local/bundle/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize' is defined here /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/type.rb:27: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/type/adapter_specific_registry.rb:9: warning: The called method `add_modifier' is defined here /usr/local/bundle/gems/activemodel-6.0.2.1/lib/active_model/type/integer.rb:13: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /usr/local/bundle/gems/activemodel-6.0.2.1/lib/active_model/type/value.rb:8: warning: The called method `initialize' is defined here /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb:12: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /usr/local/bundle/gems/activemodel-6.0.2.1/lib/active_model/type/value.rb:8: warning: The called method `initialize' is defined here Created database 'myapp_development' Created database 'myapp_test' ``` ですが、depends_onと変わらないとの事ですので、どうして上手くいったのか、よくわかりませんね。 linksについて詳しく調べてみます。 もしかしたら、私がどこかでケアレスミスをしていたのかもしれません。 とにかく、どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問