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

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

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

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

Ruby on Rails

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

Docker

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

Q&A

1回答

618閲覧

DockerでRails+MySQLの環境構築でエラーが発生します。

is02

総合スコア17

Ruby

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

Ruby on Rails

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

Docker

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

0グッド

0クリップ

投稿2020/05/30 13:07

前提・実現したいこと

DockerでRails+MySQLの環境構築をしたいです。

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

Mysql2::Error: Authentication plugin 'caching_sha2_password' cannot be loaded

認証方法が変わったことによるエラーと認識しています。

該当のソースコード

Dockerfile

# Railsコンテナ用Dockerfile # イメージのベースラインにRuby2.5.1を指定 FROM ruby:2.5.1 # Railsに必要なパッケージをインストール RUN apt-get update -qq && apt-get install -y build-essential nodejs # ルートディレクトリを作成 RUN mkdir /app # 作業ディレクトリを指定 WORKDIR /app # ローカルのGemfileとGemfile.lockをコピー COPY src/Gemfile /app/Gemfile COPY src/Gemfile.lock /app/Gemfile.lock # Gemのインストール実行 RUN bundle install # ローカルのsrcをコピー COPY src /app

docker-compose.yml

# docker-compose.ymlフォーマットのバージョン指定 version: '3' services: # Railsコンテナ定義 web: # Dockerfileを使用してイメージをビルド build: . # コンテナ起動時のデフォルトコマンド # ポート番号:3000 # バインドするIPアドレス:0.0.0.0 # ポート3000が来たらrailsサーバーが応答 command: bundle exec rails s -p 3000 -b '0.0.0.0' # ローカルのsrcをコンテナにマウント volumes: - ./src:/app # コンテナの外部に3000番を公開 # 公開するポート番号:コンテナ内部の転送先ポート番号 ports: - 3000:3000 # dbコンテナが先に起動するよう設定 depends_on: - db # pryを使用してデバッグができるよう設定 tty: true stdin_open: true # MySQLコンテナ定義 db: # mysqlを使用してコンテナ作成 image: mysql:8.0 volumes: # MySQL8.0のデフォルト認証形式をmysql_native_passwordに設定 - ./mysql-confd:/etc/mysql/conf.d # ローカルで保持しているDBをコンテナにマウント - db-volume:/var/lib/mysql # コンテナ内の環境変数を定義 environment: # mysqlのルートユーザーのパスワード設定 MYSQL_ROOT_PASSWORD: password # DBの内容をローカルに保持 volumes: db-volume:

database.yml

default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password # docker-compose.ymlに設定したmysqlのルートユーザーのパスワード host: db # docker-compose.ymlに設定したMySQLコンテナ名

補足情報(FW/ツールのバージョンなど)

この記事を参考にして構築しています。
https://qiita.com/Nishi53454367/items/aee4cf0c346bc115be99

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

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

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

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

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

guest

回答1

0

MySQL の認証方式を旧方式の mysql_native_password に戻す方法をご紹介します

次のように、ホスト側で MySQL の設定ファイルを置いたディレクトリーを用意し、
そのディレクトリーを MySQL コンテナに bind します

./mysql_conf.d/ssl.cnf:

ini

1[mysqld] 2default_authentication_plugin=mysql_native_password

docker-compose.yml:

yaml

1services: 2 database: 3 container_name: database 4 environment: 5 MYSQL_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD} 6 MYSQL_DATABASE: service 7 MYSQL_USER: app 8 MYSQL_PASSWORD: ${DATABASE_USER_PASSWORD} 9 image: mysql:8 10 restart: always 11 volumes: 12 - ./mysql_conf.d:/etc/mysql/conf.d

参考: mysql - Docker Hub

新方式の caching_sha2_password で対応する方法については
次の記事で紹介されていますが、
Amazon RDS for MySQL 8.0mysql_native_password なので、
AWS で運用する場合は注意が必要です

LinuxベースのDockerからMySQL 8.0に接続するための記述 - 前人未踏の領域へ WEB・インフラ・プログラミング全般編

投稿2020/07/07 06:54

y_shinoda

総合スコア3272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問