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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Docker

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

Q&A

解決済

1回答

1007閲覧

localhostにアクセスできない

tomsuma

総合スコア38

docker-compose

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Docker

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

0グッド

0クリップ

投稿2020/09/04 03:33

編集2020/09/04 07:02

docker-compose upして、http://localhost:3000/にアクセスすると

このようなエラーが起きてしまい困っています。

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

が出て困っています。。
エラー時参考
docker参考

エラー

試したコマンド brew uninstall mysql brew install mysql sudo mysql.server start sudo touch /tmp/mysql.sock user@fukusyun-2 Books % mysql.server restart Shutting down MySQL . SUCCESS! Starting MySQL . SUCCESS!
ターミナル web_1 | web-console (4.0.4) lib/web_console/middleware.rb:19:in `block in call' web_1 | web-console (4.0.4) lib/web_console/middleware.rb:17:in `catch' web_1 | web-console (4.0.4) lib/web_console/middleware.rb:17:in `call' web_1 | actionpack (6.0.3.2) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call' web_1 | railties (6.0.3.2) lib/rails/rack/logger.rb:37:in `call_app' web_1 | railties (6.0.3.2) lib/rails/rack/logger.rb:26:in `block in call' web_1 | activesupport (6.0.3.2) lib/active_support/tagged_logging.rb:80:in `block in tagged' web_1 | activesupport (6.0.3.2) lib/active_support/tagged_logging.rb:28:in `tagged' web_1 | activesupport (6.0.3.2) lib/active_support/tagged_logging.rb:80:in `tagged' web_1 | railties (6.0.3.2) lib/rails/rack/logger.rb:26:in `call' web_1 | sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call' web_1 | actionpack (6.0.3.2) lib/action_dispatch/middleware/remote_ip.rb:81:in `call' web_1 | actionpack (6.0.3.2) lib/action_dispatch/middleware/request_id.rb:27:in `call' web_1 | rack (2.2.3) lib/rack/method_override.rb:24:in `call' web_1 | rack (2.2.3) lib/rack/runtime.rb:22:in `call' web_1 | activesupport (6.0.3.2) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call' web_1 | actionpack (6.0.3.2) lib/action_dispatch/middleware/executor.rb:14:in `call' web_1 | actionpack (6.0.3.2) lib/action_dispatch/middleware/static.rb:126:in `call' web_1 | rack (2.2.3) lib/rack/sendfile.rb:110:in `call' web_1 | actionpack (6.0.3.2) lib/action_dispatch/middleware/host_authorization.rb:82:in `call' web_1 | webpacker (4.3.0) lib/webpacker/dev_server_proxy.rb:23:in `perform_request' web_1 | rack-proxy (0.6.5) lib/rack/proxy.rb:57:in `call' web_1 | railties (6.0.3.2) lib/rails/engine.rb:527:in `call' web_1 | puma (3.12.6) lib/puma/configuration.rb:227:in `call' web_1 | puma (3.12.6) lib/puma/server.rb:706:in `handle_request' web_1 | puma (3.12.6) lib/puma/server.rb:476:in `process_client' web_1 | puma (3.12.6) lib/puma/server.rb:334:in `block in run' web_1 | puma (3.12.6) lib/puma/thread_pool.rb:135:in `block in spawn_thread'
database.yml default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password # socket: /tmp/mysql.sock host: db development: <<: *default database: Books_development test: <<: *default database: Books_test production: <<: *default database: Books_production username: Books password: <%= ENV['BOOKS_DATABASE_PASSWORD'] %> username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock
docker-compose.yml version: '3' services: db: command: --default-authentication-plugin=mysql_native_password restart: always environment: MYSQL_ROOT_PASSWORD: example image: mysql ports: - "4306:3306" web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/app_name ports: - "3000:3000" depends_on: - db
dockerfile FROM ruby:2.6 RUN apt-get update -qq && \ apt-get install -y build-essential \ libpq-dev \ nodejs RUN mkdir /Books ENV APP_ROOT /Books WORKDIR $APP_ROOT ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock RUN gem install bundler RUN bundle install ADD . $APP_ROOT

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

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

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

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

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

m.ts10806

2020/09/04 03:35

何を参考にどうやってそこまで来たのでしょう。
tomsuma

2020/09/04 03:37

ご回答ありがとうございます。 参考記事を追加させてもらいました
y_shinoda

2020/09/04 06:38

こちらで検証しますので、ちょっとお手数ですが、 あと手元でお使いになっている docker-compose.yml と Dockerfile の追記をお願いします
tomsuma

2020/09/04 07:00

かしこまりました そこまでしてくださって感謝の限りです。。
guest

回答1

0

ベストアンサー

追記

アプリケーションの配置について

Dockerfile では WORKDIR は /Books になっているので
docker-compose.yml でもホスト側ボリュームのバインドマウントする位置は
/Books に統一する必要があります

docker-compose.yml:

diff

1 volumes: 2- - .:/app_name 3+ - .:/Books

アプリケーションを配置する位置は WORKDIR で設定したパスに統一する必要があります
コンテナーを起動したときのコマンドは WORKDIR で実行されるためです

これがずれているため、ホスト側のコードを更新しても
コンテナーを起動したときに実行されるコードは
Docker イメージをビルドした時点の過去のコードとなります
Dockerfile の ADD 命令でコンテナーの WORKDIR にコードを配置しているためです

Compose ファイルで WORKDIR にホストのコードをバインドマウントすれば
コンテナー起動時に実行されるコードは、ホスト側の現在のコードとなります

データベースのパスワード

docker-compose.yml で MYSQL_ROOT_PASSWORD: example と指定しているので、
接続用のパスワードも合わせる必要があります

config/database.yml:

diff

1- password: password 2+ password: example

テーブルの作成

docker-compose up でコンテナーを起動したら、
別のターミナルを開き、次のコマンドを実行します:

console

1docker-compose run --rm web rails db:create

この設定を行わずに docker-compose up を実行しても、ブラウザーでアクセスすると次のようなエラーが表示されます:

html

1ActiveRecord::NoDatabaseError 2FATAL: database "myapp_development" does not exist

参考: db サービスに Rails アプリケーションが利用するデータベースを新規作成 | Docker 公式ドキュメントの Rails Quickstart 完全解説 - Qiita

元の回答

エラーメッセージについて

config/database.ymlhost の設定が localhost になっている可能性があります
hostdb に設定する必要があります

参考記事より: 4 database.yml編集する。 | 既存のrails6のアプリにMySQLでDockerを導入する。 - Qiita

yaml

1default: &default 2 adapter: mysql2 3 encoding: utf8mb4 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: root 6 password: password 7 socket: /tmp/mysql.sock 8 host: db 9 # host: localhost これは以前までのもので一応コメントアウトで残しておきました。 10 11development: 12 <<: *default 13 database: 自分のDBの名前

socket について

特別な理由がなければ congit/database.ymlsocket の設定は必要ありません
/tmp/mysql.sock はローカルに MySQL が起動しているときの接続用ソケットです
リモートの MySQL に接続するときは socket の設定がなくても
mysql2 アダプターが自動的にリモートに接続します

参考: MySQL - mysql.sockって何?|teratail

MySQL のサービスについて

MySQL のサービスは Docker Compose によって db サービスのコンテナーとして起動します
HomeBrew で Mac 上に MySQL をインストール・起動させる必要はありません

うまく動作しない場合は必ず自身のコードを質問欄に記載するようにします:

  • 参考記事の執筆者のコードを完全にコピーできていない可能性を排除するため
  • 回答者が質問者と同じコードで検証するため

投稿2020/09/04 06:04

編集2020/09/04 11:44
y_shinoda

総合スコア3272

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

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

tomsuma

2020/09/04 06:29

いつも丁寧なご回答ありがとうございます hostを修正し、socketをコメントアウトしてみて docker-compose upしてローカルホストを確認したのですが やはり同じ結果でした。 コードに関して不足分があれば遠慮なくお願いします。
y_shinoda

2020/09/04 11:44

回答に追記しました
tomsuma

2020/09/04 12:16

無事成功しました! ここまで丁寧な対応してくださった方は今まで見たことがありません! 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問