前提・実現したいこと
-
Docker + Rails + Puma + Nginx + MySQLというQiitaの記事を参考に、dockerコンテナを作成しています。
-
こちらの質問(dockerで作成したrailsアプリのコンテナからMySQLへ接続ができない。)と似た内容だった為、解決方法を参考にしましたが、今回の場合は解決に至りませんでした。
発生している問題・エラーメッセージ
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で記事を確認しましたが、根本解決にはならないと判断した為、検討のみ。
皆様、お忙しい中恐縮ですがアドバイスいただけますと幸いです。
宜しくお願い致します。