docker laravelのmysqlがUbuntuでこける件
浅はかなDocker知識が招いた泥試合の記録です。
環境
- Ubuntu 18.04 on Virtualbox
- Docker 19.03.2 on Ubuntu
- docker-compose version 1.24.1 on ubuntu
- Mysql 8.0 in docker-compose
エラー内容
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の知識では問題の解決には至りませんでした。
解決策
以下2点行いました。
- データボリューム上にlogファイルをマウント
- ファイルのオーナーを起動時に変更する
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を開発しました。
タグ管理(自動補完機能付)できてスニペット同士に関連性をもたせることもできます。
またそのスニペットに関する調査事項やレファレンスなども管理できるノート機能も便利です。
ぜひ一度使ってみてください。