こちらのQiitaの記事のファイルをコピペして環境構築をしています。
Docker+Rails6+puma+nginx+mysqlの環境構築を目指しております。
DockerでRails new
してコンテナを起動するところまではうまくいったのですが、最後に docker-compose exec app rails db:create
を実行すると以下のようなエラーがでてデータベースへの接続が拒否されます。パスワードはあっているはずなのになぜか接続できません。
解決策を教えていただきたいです。
Error
1Mysql2::Error::ConnectionError: Access denied for user 'ユーザー名'@'%' to database 'webapp_development' 2Couldn't create 'webapp_development' database. Please check your configuration. 3rails aborted! 4ActiveRecord::StatementInvalid: Mysql2::Error::ConnectionError: Access denied for user 'ユーザー名'@'%' to database 'webapp_development'
databese.yml
default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch('MYSQL_USER', "root") %> password: <%= ENV.fetch('MYSQL_PASSWORD', "password") %> host: db development: <<: *default database: webapp_development test: <<: *default database: webapp_test
db.env
MYSQL_ROOT_PASSWORD=パスワード MYSQL_USER=ユーザー名 MYSQL_PASSWORD=パスワード
Dockerfile(nginx)
FROM nginx:1.15.8 # インクルード用のディレクトリ内を削除 RUN rm -f /etc/nginx/conf.d/* # Nginxの設定ファイルをコンテナにコピー COPY nginx.conf /etc/nginx/conf.d/webapp.conf # ビルド完了後にNginxを起動 CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
nginx.conf
# プロキシ先の指定 # Nginxが受け取ったリクエストをバックエンドのpumaに送信 upstream webapp { # ソケット通信したいのでpuma.sockを指定 server unix:///webapp/tmp/sockets/puma.sock; } server { listen 80; # ドメインもしくはIPを指定 server_name example.com [or 192.168.xx.xx [or localhost]]; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # ドキュメントルートの指定 root /webapp/public; client_max_body_size 100m; error_page 404 /404.html; error_page 505 502 503 504 /500.html; try_files $uri/index.html $uri @webapp; keepalive_timeout 5; # リバースプロキシ関連の設定 location @webapp { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://webapp; } }
docker-compose.yml
version: '3' services: app: build: context: . env_file: - ./environments/db.env command: bundle exec puma -C config/puma.rb volumes: - .:/webapp - public-data:/webapp/public - tmp-data:/webapp/tmp - log-data:/webapp/log depends_on: - db db: image: mysql:5.7 env_file: - ./environments/db.env volumes: - db-data:/var/lib/mysql web: build: context: containers/nginx volumes: - public-data:/webapp/public - tmp-data:/webapp/tmp ports: - 80:80 depends_on: - app volumes: public-data: tmp-data: log-data: db-data:
Dockerfile(Rails)
FROM ruby:2.7.1 # リポジトリを更新し依存モジュールをインストール RUN apt-get update -qq && \ apt-get install -y build-essential \ nodejs # yarnパッケージ管理ツールインストール RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update && apt-get install -y yarn # Node.jsをインストール RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - && \ apt-get install -y nodejs # ルート直下にwebappという名前で作業ディレクトリを作成(コンテナ内のアプリケーションディレクトリ) RUN mkdir /webapp WORKDIR /webapp # ホストのGemfileとGemfile.lockをコンテナにコピー COPY Gemfile /webapp/Gemfile COPY Gemfile.lock /webapp/Gemfile.lock # bundle installの実行 RUN bundle install # ホストのアプリケーションディレクトリ内をすべてコンテナにコピー COPY . /webapp # puma.sockを配置するディレクトリを作成 RUN mkdir -p tmp/sockets
エラー文にPlease check your configuration.
とあったのでパスワードの設定がおかしくてエラーが起きていると考え5時間ほど自己解決を試みたのですがわかりませんでした。以下に試したことを記述させていただきます。
##試したこと
- いったんコンテナ、ボリューム、イメージをすべて削除して再起動
db.env
のusernameとpasswordの欄に直接パスワードを書いてみる。- ボリュームを削除しコンテナを再起動したらコンテナ内からmysqlにルートユーザーで接続に成功しました。
しかし、docker-compose exec app rails db:creat
は失敗する。
select Host, User, Password from mysql.user;
を実行。Passwordを設定したはずなのにPasswordカラムが存在しない。
ご教授いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/20 12:29
2020/06/20 13:01