問題
Laravel 專案 使用 Windows docker 執行php 容器 及 mysql 容器時, 在windows git bash 執行 php artisan migrate 發現找不到資料庫。
補充
由於本專案需要做負載均衡所以DB_HOST寫的是 DB_HOST=’mysql’ 容器, 如果不走容器負載均衡,本地修改成DB_HOST=127.0.0.1 即可, 不用重新封裝命令。
報錯資訊:
Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: 未知 (SQL: select * from ***)
at E:\project\vendor\laravel\framework\src\Illuminate\Database\Connection.php:669
665| // If an exception occurs when attempting to run a query, we'll format the error
666| // message to include the bindings with SQL, which will make this exception a
667| // lot more helpful to the developer instead of just the database's errors.
668| catch (Exception $e) {
> 669| throw new QueryException(
670| $query, $this->prepareBindings($bindings), $e
671| );
672| }
673|
Exception trace:
1 Doctrine\DBAL\Driver\PDOException::("SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: 知 ")
E:\project\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOConnection.php:31
2 PDOException::("PDO::__construct(): php_network_getaddresses: getaddrinfo failed: 知 ")
E:\project\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOConnection.php:27
Please use the argument -v to see more details.
原因
windows 下執行 php artisan migrate 時連不到容器裡的mysql
解決
重新寫一個shell 命令封裝一下 php artisan 命令, 進行容器後執行php artisan 如下:
phpartisan 檔案內容
#!/usr/bin/env sh
# 進入容器 執行相應php artisan命令
docker exec -i 容器名稱 sh -c "cd /專案的容器路徑 && php artisan $*"
執行 php artisan *
命令 換成 phpartisan *
即可
本作品採用《CC 協議》,轉載必須註明作者和本文連結