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

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

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

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

Docker

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

Q&A

解決済

1回答

4530閲覧

docker-compose run web rails db:createをするとエラーになる

shin342

総合スコア22

Ruby on Rails

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

Docker

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

0グッド

1クリップ

投稿2020/07/12 09:37

編集2020/07/12 09:39

前提・実現したいこと

既存のRailsアプリの開発環境をDockerに変更中です。
docker-compose upを実行し、docker-compose run web rails db:createを実行するとエラーになってしまいます。
改善方法がわからないため、ご教授頂けますと幸いです。

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

Unknown MySQL server host 'db' (-2) Couldn't create 'docker_development' database. Please check your configuration.

該当のソースコード

datebase.yml

default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password # docker-compose.ymlのMYSQL_ROOT_PASSWORD host: db development: <<: *default username: root password: password database: docker_development production: <<: *default database: <%= ENV['DB_DATABASE'] %> adapter: mysql2 encoding: utf8mb4 charset: utf8mb4 collation: utf8mb4_general_ci host: <%= ENV['DB_HOST'] %> username: <%= ENV['DB_USERNAME'] %> password: <%= ENV['DB_PASSWORD'] %>

docker-compose.yml

version: '2' services: db: image: mysql:latest environment: MYSQL_USER: root MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: docker_development MYSQL_PASSWORD: password volumes: - mysql-data:/var/lib/mysql #データの永続化のために必要 ports: - "4306:3306" #両方3306でもok。詳細は下の「番外編:DBをsequel proで可視化したい」へ web: tty: true #コンテナ上でbinding.pryするために必要 stdin_open: true #コンテナ上でbinding.pryするために必要 build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myproject #ローカルのディレクトリをコンテナ上にマウント - bundle:/usr/local/bundle #bundle installした後buildし直さなくてよくなる ports: - "3000:3000" links: - db volumes: mysql-data: bundle: #bundle installした後buildし直さなくてよくなる]

Dockerfile

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

試したこと

docker-compose run --rm web rake db:create imageとコンテナを全て削除

また、docker logsでは以下のエラーが出現しました。

[ERROR] [MY-013090] [InnoDB] Unsupported redo log format (0). The redo log was created before MySQL 5.7.9 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error. [ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine. [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. [ERROR] [MY-010119] [Server] Aborting

よろしくお願いします。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Docker の volume に残っているデータが
MySQL 5.7.9 よりも前のバージョンで作成されたものであることが原因のようです:

console

1[ERROR] [MY-013090] [InnoDB] Unsupported redo log format (0). The redo log was created before MySQL 5.7.9

参考: Answer: MYSQL 8.0 - unsupported redo log format

volume に残っているデータが必要な場合は、
ひとまず MySQL の image を 5.7.9 よりも前のバージョンに固定すれば
問題なく動作することが期待できます:

yaml

1services: 2 db: 3 image: mysql:5.7.8

参考:mysql Tags - Docker Hub

データが不要な場合は、volume を削除することで
次回、docker-compose up したとき、新たにデータベースが再構築されます:

console

1docker-compose down --volumes

参考: docker-compose down | Docker Documentation

投稿2020/07/12 09:51

編集2020/07/12 11:56
y_shinoda

総合スコア3272

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

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

shin342

2020/07/12 11:04

dbサービスはExitedになっています。 docker logsの結果は最後に書いた結果となりました。
YakumoSaki

2020/07/12 11:46

docker logs の結果を見ると、MySQLのデータが、違うバージョンのMySQLで作られたものなので読めない。 っていうエラーが出てますね。 db:createをするのであれば、今あるMySQLのデータは不要だと思うので移動なり削除してみると解決するかもしれません。 貼っていただいているdocker-compose.yml だと `/var/lib/mysql` の中身ですね
y_shinoda

2020/07/12 11:57

失礼しました、 回答を更新しました、ご確認おねがいします
shin342

2020/07/12 14:24

おっしゃるとおりの原因でした。 image: mysql:5.7.8と変更することでエラーがなくなりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問