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

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

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

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

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

Docker

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

Q&A

1回答

3140閲覧

Docker+Railsの環境構築でdb:createしようとするとエラーになる

j30st

総合スコア28

MySQL

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

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

Docker

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

0グッド

0クリップ

投稿2020/04/15 12:02

編集2020/04/16 01:18

前提・実現したいこと

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

db:createができない状況です。

ruby:

1$ docker-compose exec app rails db:create 2Access denied for user 'root'@'172.20.0.3' (using password: YES) 3Couldn't create 'crnproject_development' database. Please check your configuration. 4rails aborted! 5Mysql2::Error::ConnectionError: Access denied for user 'root'@'172.20.0.3' (using password: YES)

冒頭の参考質問では、後述するdb.anvとdatabase.yml内のパス記載に差異があり、その結果同エラーが発生していたようですが、今回の質問の場合、その点はクリアできているかと考えています。
その為、それ以外に考えられる原因や解決方法があればご教示いただきたいです。

該当のソースコード

ファイル名の.は省略してあります。

dockercompose

1version: '3' 2services: 3 db: 4 image: mysql:5.6 5 env_file: 6 - ./environments/db.env 7 volumes: 8 - mysql-data:/var/lib/mysql 9 ports: 10 - "4306:3306" 11 12 app: 13 build: . 14 command: bundle exec puma -C config/puma.rb 15 volumes: 16 - .:/crnproject 17 - public-data:/crnproject/public 18 - tmp-data:/crnproject/tmp 19 - log-data:/crnproject/log 20 21 web: 22 build: 23 context: containers/nginx 24 volumes: 25 - public-data:/crnproject/public 26 - tmp-data:/crnproject/tmp 27 ports: 28 - 80:80 29volumes: 30 mysql-data: 31 public-data: 32 tmp-data: 33 log-data:

Dockerfile

1FROM ruby:2.5.1 2 3RUN apt-get update && \ 4 apt-get install -y mysql-client nodejs vim --no-install-recommends && \ 5 rm -rf /var/lib/apt/lists/* 6 7RUN mkdir /crnproject 8 9WORKDIR /crnproject 10 11ADD Gemfile /crnproject/Gemfile 12ADD Gemfile.lock /crnproject/Gemfile.lock 13 14RUN gem install bundler 15RUN bundle install 16 17ADD . /crnproject 18 19RUN mkdir -p tmp/sockets

Dockerfile

1#nginxのDockerfile 2FROM nginx:1.15.8 3 4# インクルード用のディレクトリ内を削除 5RUN rm -f /etc/nginx/conf.d/* 6 7# Nginxの設定ファイルをコンテナにコピー 8ADD nginx.conf /etc/nginx/conf.d/myproject.conf 9 10# ビルド完了後にNginxを起動 11CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

nginxConf

1# プロキシ先の指定 2# Nginxが受け取ったリクエストをバックエンドのpumaに送信 3upstream crnproject { 4 # ソケット通信したいのでpuma.sockを指定 5 server unix:///crnproject/tmp/sockets/puma.sock; 6} 7 8server { 9 listen 80; 10 # ドメインもしくはIPを指定 11 server_name localhost; 12 13 access_log /var/log/nginx/access.log; 14 error_log /var/log/nginx/error.log; 15 16 # ドキュメントルートの指定 17 root /crnproject/public; 18 19 client_max_body_size 100m; 20 error_page 404 /404.html; 21 error_page 505 502 503 504 /500.html; 22 try_files $uri/index.html $uri @crnproject; 23 keepalive_timeout 5; 24 25 # リバースプロキシ関連の設定 26 location @crnproject { 27 proxy_set_header X-Real-IP $remote_addr; 28 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 29 proxy_set_header Host $http_host; 30 proxy_pass http://crnproject; 31 } 32}

pumaRb

1threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } 2threads threads_count, threads_count 3 4port ENV.fetch("PORT") { 3000 } 5 6environment ENV.fetch("RAILS_ENV") { "development" } 7 8plugin :tmp_restart 9 10app_root = File.expand_path("../..", __FILE__) 11bind "unix://#{app_root}/tmp/sockets/puma.sock" 12 13stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true

databaseYml

1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: <%= ENV.fetch('MYSQL_USER') { 'root' } %> 6 password: <%= ENV.fetch('MYSQL_PASSWORD') { 'password' } %> 7 host: db 8 9development: 10 <<: *default 11 database: crnproject_development 12 13test: 14 <<: *default 15 database: crnproject_test 16 17production: 18 <<: *default 19 database: crnproject_production 20 username: crnproject 21 password: <%= ENV['CRNPROJECT_DATABASE_PASSWORD'] %>

dbEnv

1MYSQL_ROOT_PASSWORD=xxxxxxxx 2MYSQL_USER=xxxxxxxx 3MYSQL_PASSWORD=xxxxxxxx 4 5# xxxxxxxxには質問者指定のパスが入っています

以下、コンテナ起動状況

$ docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------- crnproject_app_1 bundle exec puma -C config ... Up crnproject_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:4306->3306/tcp crnproject_web_1 /bin/sh -c /usr/sbin/nginx ... Up 0.0.0.0:80->80/tcp

イメージ

$ docker-compose images Container Repository Tag Image Id Size -------------------------------------------------------------------- crnproject_app_1 crnproject_app latest 529415b3b0fd 1.118 GB crnproject_db_1 mysql 5.6 c21620125f9e 302.6 MB crnproject_web_1 crnproject_web latest c39bf0eec56b 109.2 MB

検討・試したこと

  • 冒頭リンク先の解決方法。

┗具体的には、database.ymlとdb.envのパスワード差異の確認。

  • DB操作権限の付与
$ vim db/grant_user.sql

grantUserSql

1GRANT ALL PRIVILEGES ON *.* TO 'db.env内のMYSQL_USER'@'%'; 2FLUSH PRIVILEGES;
  • docker-compose.yml内のdb内volumeの削除・・・解決方法としてQiitaで記事を確認しましたが、根本解決にはならないと判断した為、検討のみ。

皆様、お忙しい中恐縮ですがアドバイスいただけますと幸いです。
宜しくお願い致します。

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

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

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

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

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

bsdfan

2020/04/18 05:48

appのコンテナでdb.envの内容が参照されていないことはないですか。 rootで接続しにいくのが想定の動作?
j30st

2020/04/18 11:30

ご回答ありがとうございます。 エラー時にrootとユーザー名が出てしまっているので、参照出来ていないということになるのでしょうか、、 db.env内ではMYSQL_USERにrootを設定していません。
guest

回答1

0

参考にされてるQiitaのページだと、appにも

yaml

1 env_file: 2 - ./environments/db.env

が入っていますが、こちらでは抜けているようです。
そのせいではないでしょうか。

投稿2020/04/18 12:42

bsdfan

総合スコア4560

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

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

j30st

2020/04/18 12:58

試してみましたが、同じエラーが出るようです。 ご回答ありがとうございます。 自身の理解が及ばない範囲の実装になっているので、まずは理解のある範囲で実装を進めてみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問