4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

docker-composeでRuby+MySQLの環境構築する際に「Unknown MySQL server host 'db' (-3)」でハマった話

Posted at

はじめに

docker-composeの概要を学ぶべく学習上、Ruby+MySQLで環境構築を進めていく中で
ハマってしまった箇所があるのでその備忘録として記事に残します。

環境

  • Docker 23.0.5
  • ruby 2.7.8
  • MySQL 8.0
  • rails 6.1.7
  • Windows 11

手順

以下のコマンドでDBを作成したところ、、、

$ docker-compose run web rails db:create

こんなプロンプトが返ってきました。

Unknown MySQL server host 'db' (-3)
Couldn't create 'app_development' database. Please check your configuration.
rake aborted!
ActiveRecord::ConnectionNotEstablished: Unknown MySQL server host 'db' (-3)

MySQLサーバーに接続できずDBコンテナが動作しない、、、
まずは、ログを確認

$ docker-compose logs db

ログの中の一番始めのエラーで以下のエラー文が吐かれたいました。

[ERROR] [MY-012960] [InnoDB] Cannot create redo log files because data files are corrupt or the database was not shut down cleanly after creating the data files.

Dataファイルが破損しているみたいなエラーが発生していました。

解決方法

実はパスワードの設定を間違ったまま db:create を実施してエラーが出た際に破損したDataファイルが残ったままでその上で再度実施した際に上記のエラーが発生した模様です。

docker-compose.ymlにデータ永続化のために、ボリュームマウントしていたため、
docker compose downでコンテナを削除した後もデータディレクトリの中身が保持されていました。

docker-compose.yml
version: '3'
services:
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - ./src/db/mysql_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - ./src:/app
    ports:
      - "3000:3000"
    depends_on:
      - db

なので、一旦Dataファイルが含まれているDataディレクトリを初期化する必要があります。
ボリュームごとコンテナを削除します。

$ docker-compose down -v

mysql_dataディレクトリ配下のファイルも削除しておきます。

docker system prune -a で不要なコンテナやイメージを削除し、再度ビルドします。

$  docker system prune -a
:
$ docker-compose build

ビルドが終わったら、DB作成。

$ docker-compose run web rails db:create

今度こそDBの作成に成功しました!

Created database 'app_development'
Created database 'app_test'

コンテナも起動できている様子!

$ docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED              STATUS              PORTS
rails_docker-db-1   mysql:8.0           "docker-entrypoint.s…"   db                  About a minute ago   Up About a minute   3306/tcp, 33060/tcp

参考

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?