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

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

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

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

MySQL

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

nginx

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

Docker

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

Q&A

解決済

1回答

2996閲覧

dockerで作成したrailsアプリのコンテナからMySQLへ接続ができない。

T.Adams

総合スコア40

Ruby on Rails 6

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

MySQL

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

nginx

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

Docker

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

1グッド

1クリップ

投稿2020/04/03 16:26

編集2020/04/03 16:35

前提

Docker + Rails + Puma + Nginx + MySQLというQiitaの記事を参考に、AWSのEC2上で、dockerコンテナを作成しています。

分からないこと

docker-compose exec app rails db:createを実行し、Railsアプリから、DBの作成を行うコマンドをEC2上から実行するのですが、ここで以下のエラーが検出されました。この原因がわかりません。

bash

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

わかっていること

EC2上から、DBへの接続は可能です。以下のコマンドを使用し、MySQLユーザ、rootm権限を持つMySQLユーザの両者で、ログインができました。

Bash

1$ docker-compose exec db mysql -u user_name -p 2mysql > 3 4$ docker-compose exec db mysql -u root -p 5mysql >

少し気になっていること

正しいかわかりませんが、 docker-compose runを実行した際に、Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/と出力されたことが少し気になっています。これが原因でしょうか。
不慣れなもので、yarnをdocker上のコンテナであとからinstallする場合、どのように指示すればよいのかわかっていません。

環境情報

dockercompose

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

以下はRails用のDockerfileです。

RailsDockerfile

1FROM ruby:2.7.1 2 3RUN apt-get update -qq && \ 4 apt-get install -y build-essential \ 5 apt-utils \ 6 nodejs 7 8RUN mkdir /webapp 9WORKDIR /webapp 10 11ADD Gemfile /webapp/Gemfile 12ADD Gemfile.lock /webapp/Gemfile.lock 13 14RUN bundle install 15 16ADD . /webapp 17 18RUN mkdir -p tmp/sockets

以下は、Nginx用のDockerfileです。

NginxDockerfile

1FROM nginx:1.15.8 2 3RUN rm -f /etc/nginx/conf.d/* 4 5ADD nginx.conf /etc/nginx/conf.d/webapp.conf 6 7CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

nginxCONF

1server { 2 listen 80; 3 server_name xx.xx.xx.xx; # EC2のElastic IPを指定 4 5 access_log /var/log/nginx/access.log; 6 error_log /var/log/nginx/error.log; 7 8 root /webapp/public; 9 10 client_max_body_size 100m; 11 error_page 404 /404.html; 12 error_page 505 502 503 504 /500.html; 13 try_files $uri/index.html $uri @webapp; 14 keepalive_timeout 5; 15 16 location @webapp { 17 proxy_set_header X-Real-IP $remote_addr; 18 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 19 proxy_set_header Host $http_host; 20 proxy_pass http://webapp; 21 } 22}

以下、わかりやすくするため、拡張子を大文字にしました。

pumaRRB

1threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i 2threads threads_count, threads_count 3port ENV.fetch("PORT") { 3000 } 4environment ENV.fetch("RAILS_ENV") { "development" } 5plugin :tmp_restart 6 7app_root = File.expand_path("../..", __FILE__) 8bind "unix://#{app_root}/tmp/sockets/puma.sock"

databaseYML

1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: <%= ENV.fetch('user_name') { 'root' } %> 6 password: <%= ENV.fetch('user_password') { 'password' } %> 7 host: db 8 9development: 10 <<: *default 11 database: webapp_development 12 13test: 14 <<: *default 15 database: webapp_test

dbenv

1MYSQL_ROOT_PASSWORD=db_root_password 2MYSQL_USER=user_name 3MYSQL_PASSWORD=user_password

dockerコンテナの起動状況は以下です。

Bash

1$ docker-compose ps 2 Name Command State Ports 3--------------------------------------------------------------------------- 4webapp_app_1 bundle exec puma -C config ... Up 5webapp_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp 6webapp_web_1 /bin/sh -c /usr/sbin/nginx ... Up 0.0.0.0:80->80/tcp

dockerイメージは以下です。

Bash

1$ docker-compose images 2webapp_app_1 webapp_app latest 361f62018f81 1.03 GB 3webapp_db_1 mysql 5.7.28 db39680b63ac 416 MB 4webapp_web_1 webapp_web latest aa805b0e3401 121 MB

その他

  • OS: Amazon linux 2
  • Rails: 6.0.2.2
  • Ruby:2.7.1
  • MySQL: 5.7.28
  • Nginx: 1.15.8
takuyandao👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

Access denied for user 'root'@'172.19.0.3' (using password: YES)

と書かれています。DBへのアクセスが拒否され、パスワードが必要と言われています。

DBのパスワードは dbenv に書かれていますね。

ただdatabase.ymlをみると必要な環境変数がdbenvに定義されていなそうです。
database.ymldbenvで定義されているように書き換えてください。

例えば、以下のようになるかと思います。

pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch('MYSQL_USER') { 'root' } %> password: <%= ENV.fetch('MYSQL_PASSWORD') { 'password' } %>

YarnのInstallは、Dockerfileでyarn installを実行してあげてください。

RUN apt-get update -qq && \ apt-get install -y build-essential \ apt-utils \ nodejs npm &&\ npm install -g yarn

投稿2020/04/04 02:14

hatsu

総合スコア1809

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

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

T.Adams

2020/04/04 02:21

ありがとうございます。ymlファイルに記載されているrootユーザのパスワードと、envファイルに記載されているrootユーザのパスワードに差異がありました。正しいものに統一しました。ありがとうございます。yarnに関しては、コンテナ内部に入り直接インストールしましたが、本来は、Dockerfileで実施したほうが楽ですよね。次からそのようにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問