dockerでcakephp3.6の環境構築の際にデータベースにmysqlを使用した時に遭遇したエラーと解決方法です。
エラーその1
[2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
原因 host名とdocker-compose.ymlで指定したサービス名が異なる
これは調べてみたらアプリケーション側で指定したhost名とdocker-compose.ymlで指定したservice名が異なる場合に起こるエラーらしい。
version: '3'
services:
db:
image: mysql:8.0
restart: always
container_name: cake-db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: master
MYSQL_USER: pass
MYSQL_PASSWORD: pass
DB_HOST=db
MYSQL_ROOT_PASSWORD:root
DB_DATABASE=master
DB_USERNAME=pass
DB_PASSWORD=pass
service名とDB_HOSTを一緒にしたら直りました。
エラーその2
[2054] The server requested authentication method unknown to the client
今度は認証系で何やらエラーが起きてます。
原因 mysql8.0からデフォルトの認証方式が変更されている
今回は5.*系ではなく8.0のイメージを指定していて8.0からデフォルトの認証方式が従来のmysql_native_password
からcaching_sha2_password
に変更されたらしいので、とりあえず認証方式を従来の方法に変更してみます。
dbサービスのところに
command: --default-authentication-plugin=mysql_native_password
を追加
エラーが解消されました。
参照:
https://dev.mysql.com/doc/refman/8.0/ja/sha256-pluggable-authentication.html
https://mebee.info/2020/08/17/post-16830/
https://qiita.com/uta3chame/items/47b393e5887530573118