docker

docker-compose で起動したMySQLのコンテナがExit 1 とったときの解消方法

経緯

docker-compose up -d コマンドを実行。
done となったためmysqlコマンドで接続しようとしたらエラーとなり接続出来なかった。

docker-compose.yml

version: '3'
services:
  # MySQL
  db:
    image: mysql:8.0.22
    ports:
      - "3306:3306"
    container_name: mysql_host
    environment:
      MYSQL_ROOT_PASSWORD: mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./db/data:/var/lib/mysql
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./db/sql:/docker-entrypoint-initdb.d

調べたこと

docker-compose ps コマンドで見たらStateが「Exit 1」となっていた。

   Name                 Command               State    Ports
------------------------------------------------------------
mysql_host   docker-entrypoint.sh mysql ...   Exit 1        

docker-compose logs コマンドを見たら下記のようなエラーが発生していた。

mysqld: Can't open file: 'mysql.ibd' (errno: 0 - )

試したこと

①:dataディレクトリにある、「mysql.ibd」ファイルを削除
  →docker-compose up -d コマンドを試しても解決せず

②:dataディレクトリの削除と、「docker-compose kill」コマンドを実施
  →解消!

②の後、「docker-compose up -d」コマンド実施して「docker-compose ps」コマンドでStateがUpになっていることを確認

最後に

もしかしたら「mysql.ibd」ファイル削除後に「docker-compose kill」コマンドを行えば解決したかもしれません。
とはいえibdファイル削除のみだと結局テーブル作り直しなので構築初期段階なら労力は変わらないかなと考えています。

原因につちえは何も分かりません 思い当たる節といえばDockerfileで類似のMySQLコンテナを立てていたのでそれが原因だったかもしれません。