Laravel 專案 使用 Windows docker 執行php 容器 及 mysql 容器時,連不起資料庫。

vimkid發表於2021-03-19

問題

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 協議》,轉載必須註明作者和本文連結

相關文章