Dockerで環境構築していた際につまづいたので、メモりました。
ご参考になれば幸いです。
概要
下記記事を参照してLaravel+React+MySQLの環境をDockerで作成しようとしたところ エラーが発生しました。
エラー内容
タイトルにある通り、以下のエラーが発生しました。tarminal
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: Name or service not known (SQL: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')
DB(MySQL)への接続が上手くいっていないらしい...
調査結果
コンテナの起動確認
tarminal
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
737e1499b7c0 9df10d5fd4e9 "/entrypoint.sh mysq…" About a minute ago Exited (1) About a minute ago docker-laravel_db_1
d11753ef631f f5bc33c1bffa "/docker-entrypoint.…" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp docker-laravel_web_1
1055b9270a37 198704a55e0c "docker-php-entrypoi…" 6 minutes ago Up 6 minutes 9000/tcp docker-laravel_app_1
dbコンテナだけSTATUSが「Exited」のままで起動していない
ログ確認
tarminal
$ docker logs <コンテナID>
[Entrypoint] MySQL Docker Image 8.0.27-1.2.6-server
[Entrypoint] Starting MySQL 8.0.27-1.2.6-server
2022-01-09T05:11:30.261390-00:00 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.27) starting as process 1
2022-01-09T05:11:30.264356-00:00 0 [ERROR] [MY-013276] [Server] Failed to set datadir to '/var/lib/mysql/' (OS errno: 13 - Permission denied)
2022-01-09T05:11:30.264532-00:00 0 [ERROR] [MY-010119] [Server] Aborting
2022-01-09T05:11:30.264761-00:00 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.27) MySQL Community Server - GPL.
[Entrypoint] MySQL Docker Image 8.0.27-1.2.6-server
[Entrypoint] Starting MySQL 8.0.27-1.2.6-server
2022-01-09T05:11:44.674545-00:00 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.27) starting as process 1
2022-01-09T05:11:44.677153-00:00 0 [ERROR] [MY-013276] [Server] Failed to set datadir to '/var/lib/mysql/' (OS errno: 13 - Permission denied)
2022-01-09T05:11:44.677246-00:00 0 [ERROR] [MY-010119] [Server] Aborting
2022-01-09T05:11:44.677499-00:00 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.27) MySQL Community Server - GPL.
/var/lib/mysqlにデータを永続化したかったけど、マウントするところでアクセス権限がないよって怒られてますね。
解決策
ググったところ、下記記事が参考になりました。
この記事の中に下記の文言が記載されている
つまり、マウントしたディレクトリに書き込めるのは、root か uid=1000 のユーザだけである。
my.cnfに記載されている動作ユーザの権限が「mysql」になっていたので、権限を「root」に変更してビルドしたところ無事解決!!
tarminal
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (65.04ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (43.12ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (40.74ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (68.47ms)