DockerでLAMP環境を構築し、Laravelからmysqlに接続(php artisan migrate)しようとした際にエラーが発生。
つまづいたので、メモします。
エラー内容
Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from information_schema.tables where table_schema = database and table_name = migrations and table_type = 'BASE TABLE')
エラー内容を見たところ、mysqlに接続しているホスト名が違うらしいので、laravelの.envファイルとdocker-composer.ymlを確認。
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=hoge
DB_PASSWORD=hoge
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
container_name: db-host
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: database
MYSQL_USER: hoge
MYSQL_PASSWORD: hoge
別の方法でmysqlに接続
ホスト名は間違ってなさそうだと思い、データベースマネージャ(TablePlus)を使い接続を確認。
Ver: Mysql 5.x
Host: 127.0.0.1
Port: 3306
User: hoge
password: hoge
Database: database
TablePlusではつながりました。
もしや問題はDocker特有の何か、、??
DockerのDBコンテナ関連について調べた
こちらの記事によるとコンテナ内からのコンテナに接続する際はホスト名がIPでは無理らしく、service名で接続だそう
Laravel内の
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=hoge
DB_PASSWORD=hoge
を
.env
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=hoge
DB_PASSWORD=hoge
に修正。
つながった