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

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

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

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

Ruby on Rails

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

Docker

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

Q&A

1回答

4047閲覧

docker-composeによるrails+postgresqlの環境構築

buware

総合スコア10

docker-compose

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

Ruby on Rails

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

Docker

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

0グッド

0クリップ

投稿2019/03/09 01:22

編集2019/03/09 01:26

docker-compose でRails+Postgresql開発環境構築

docker-compose でRails+Postgresqlの二つのコンテナを実行して
開発環境を準備しました。
db:migrateを実行したところ、成功せずに
下記のエラーが発生してしまいます。

docker-compose run web rake db:migrateで発生のエラー

rake aborted! PG::ConnectionBad: 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"?

調べたところDBのサービスが立ち上がってないとのことだったので下記を試したのですがエラーです。

docker-compose run db service postgresql startで発生のエラー

[warn] No PostgreSQL clusters exist; see "man pg_createcluster" ... (warning).

docker ps ではwebコンテナもdbコンテナも起動しています

docker-compose up -d でコンテナを起動すれば
DBサービスもWebサービスも起動して
連携して使えるようになる認識ですが他にもコマンドが必要なのでしょうか
あるいは設定等に不備があるのかと思うのですが
原因がつかめず困っています。
以下にに設定ファイルを載せておきます。

原因と解決策がわからないので
教えて頂きたいです。
難しければ
ヒントでも構いません。

足りない情報があれば、言っていただければ追記いたします。

よろしくお願いいたします。

Dockerfile

FROM ruby:2.5.3 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock RUN bundle install COPY . /app

database.yml

default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: e_development test: <<: *default database: e_test production: <<: *default database: e_production username: e password: <%= ENV['E_DATABASE_PASSWORD'] %>

docker-compose.yml

version: '3' services: web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app ports: - 3000:3000 depends_on: - db tty: true stdin_open: true environment: DATABASE_USER: postgres DATABASE_PASSWORD: DATABASE_PORT: 5432 DATABASE_HOST: db db: image: postgres:10 user: postgres ports: - "5432" volumes: - db-volume:/var/lib/postgres environment: MYSQL_ROOT_PASSWORD: password volumes: db-volume:

Gemfile

source 'https://rubygems.org' git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{repo_name}.git" end # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.1.4' # Use postgresql as the database for Active Record gem 'pg', '~> 0.18' # Use Puma as the app server gem 'puma', '~> 3.7' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development gem 'devise' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

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

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

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

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

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

FKM

2019/03/09 03:42 編集

railsとpostgresqlのバージョンの提示もお願いします。
buware

2019/03/10 13:57

railsは5.1.6.1 postgreは10です。
guest

回答1

0

database.database.ymlでhostが指定されてないので、デフォルトのunix domain socketに接続しようとして、エラーになっているのではないでしょうか。

Dockerでは、redmineとpostgresを同じサーバー上で動かしても、それぞれの環境が分離されているので、別のサーバーで動作させているのと同等です。なので、ネットワーク経由で接続させます。

docker-composeの場合、お互いはサービス名と同じホスト名でアクセスできます。
database.ymlにhost: dbを追加すればいいと思います。

投稿2019/03/09 15:20

編集2019/03/09 22:48
bsdfan

総合スコア4567

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

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

buware

2019/03/10 14:04

ありがとうございます database.ymlのdevelopmentに追加したのですが PG::ConnectionBad: FATAL: role "root" does not exist というエラーに変わりました
bsdfan

2019/03/10 14:52

postgresに、rootというユーザ(role)が存在していないというエラーです。 database.ymlにusernameの設定がないため、ログイン名のrootで接続しようとしています。 Railsのこのあたりの設定や手順については、いろんなところで書かれているので、探して、読んでみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問