MetaPii 技術室

あなたの知恵と思いを検索するフラッシュメモアプリMetaPiiのエンジニアブログです。

docker laravelのmysqlがUbuntuでこける件

浅はかなDocker知識が招いた泥試合の記録です。

環境

エラー内容

Initializing database
2019-09-15T13:33:50.756496-00:00 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2019-09-15T13:33:50.756598-00:00 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.17) initializing of server in progress as process 28
2019-09-15T13:33:50.758448-00:00 0 [ERROR] [MY-010187] [Server] Could not open file '/var/log/mysql/mysql-error.log' for error logging: Permission denied
2019-09-15T13:33:50.758811-00:00 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2019-09-15T13:33:50.758906-00:00 0 [ERROR] [MY-010119] [Server] Aborting
2019-09-15T13:33:50.760556-00:00 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.17)  MySQL Community Server - GPL.

原因

結局はファイルのowner問題です。特にエラーログまわり
いろいろ記事は探して以下は参考になったんですが、私の浅はかなLinuxの知識では問題の解決には至りませんでした。

qiita.com

解決策

以下2点行いました。

  1. データボリューム上にlogファイルをマウント
  2. ファイルのオーナーを起動時に変更する
0.準備
  • git clone
$ pwd
/home/dev/docker
$ git clone https://github.com/ucan-lab/docker-laravel.git
$ cd docker-laravel
1. データボリューム上にマウント
$ pwd
/home/dev/docker/docker-laravel
$ vi docker-compose.yml 
  • 変更前:docker-compose.yml
  db:
    image: mysql:8.0
    volumes:
      - db-store:/var/lib/mysql
      - ./logs:/var/log/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
〜省略
volumes:
  db-store:
  redis-store:
  • 変更後:docker-compose.yml
    以下のように、image項目を削除し自分でbuildファイルを作成し実行できるようにします。
  db:
    build:
      context: "."
      dockerfile: DockerfileDB
    volumes:
      - db-store:/var/lib/mysql
      - db-log-store:/var/log/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
〜省略
volumes:
  db-store:
  db-log-store:
  redis-store:
2.ファイルのオーナーを起動時に変更する
$ pwd
/home/dev/docker/docker-laravel
$ vi DockerfileDB
  • 新規作成:DockerfileDB
FROM mysql:8.0
RUN mkdir /var/log/mysql
RUN chown mysql:mysql /var/log/mysql 
起動確認
$ docker compose build
$ docker compose up -d 
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                                NAMES
3249c67bc967        nginx:1.17-alpine   "nginx -g 'daemon of…"   4 seconds ago       Up 2 seconds               0.0.0.0:10080->80/tcp                myproject_web_1
1086fe08bbb6        mysql:8.0           "docker-entrypoint.s…"   11 seconds ago      Up 5 seconds               33060/tcp, 0.0.0.0:13307->3306/tcp   myproject_db-testing_1
473f6acf9f46        mailhog/mailhog     "MailHog"                11 seconds ago      Up 7 seconds               1025/tcp, 0.0.0.0:18025->8025/tcp    myproject_mail_1
8daae7ea27d4        redis:5.0-alpine    "docker-entrypoint.s…"   11 seconds ago      Up 8 seconds               6379/tcp                             myproject_redis_1
b74eeb2e0340        myproject_app       "docker-php-entrypoi…"   11 seconds ago      Up 3 seconds               9000/tcp, 0.0.0.0:18000->8000/tcp    myproject_app_1
34d77196f83a        node:12.8-alpine    "docker-entrypoint.s…"   11 seconds ago      Exited (0) 6 seconds ago                                        myproject_node_1
ecce1dc69755        myproject_db        "docker-entrypoint.s…"   11 seconds ago      Up 4 seconds               33060/tcp, 0.0.0.0:13306->3306/tcp   myproject_db_1

開発したサービス

このdocker構成を起点にエンジニア向けスニペット管理ツールMetaPiiを開発しました。
タグ管理(自動補完機能付)できてスニペット同士に関連性をもたせることもできます。
またそのスニペットに関する調査事項やレファレンスなども管理できるノート機能も便利です。 ぜひ一度使ってみてください。

www.metapii.com

その他参考記事

qiita.com

unix.stackexchange.com