1. 程式人生 > 其它 >docker 執行TP 的 migrate資料庫遷移報錯2002

docker 執行TP 的 migrate資料庫遷移報錯2002

在操作docker的時候總會有一些錯誤,這不現在錯誤來了

在我執行

 php think migrate:run

的時候出現了以下錯誤

[InvalidArgumentException]
There was a problem connecting to the database: SQLSTATE[HY000] [2002] Connection refused

我這兒一看,這不是資料連線錯誤,難道是我資料庫的使用者名稱,密碼,埠寫錯了?

於是我仔細檢查了資料庫配置檔案,發現沒有任何問題,經過一番查閱,猜測很有可能是連結地址寫錯了,因為我寫的事127.0.0.1,於是我將它改成了localhost

重新執行發現,耶~~,錯誤變了

[InvalidArgumentException]
There was a problem connecting to the database: SQLSTATE[HY000] [2002] No such file or directory

但是錯誤狀態碼是一樣的

繼續找

經過一番查詢,應該是找不到mysql sokcet的路徑導致,那麼首先得找到mysql的配置檔案中查詢,進入容器之後我找是找到了,但是又想到了一個問題,使用的是docker,兩個容器雖然在同一個網路,但是他們是獨立的個體,改了配置就能解決問題嗎?

到這裡我就感覺思路錯了!

於是又是一番查詢,終於看到一篇部落格證實了我的猜測

https://www.cnblogs.com/maowenqiang/p/16010447.html

原文是這麼說的

使用docker生成mysql容器,

在連線時,

如果你把host寫成 localhost $host='localhost';

會報錯: SQLSTATE[HY000] [2002] No such file or directory

如果把 host 寫成 IP 地址,

$host='127.0.0.1';

會報錯 SQLSTATE[HY000] [2002] Connection refused

解決:

應該寫成mysql容器的名稱,

例如 $host='lnmp_mysql';

這裡有個前提, 需要你的mysql容器和php容器在同一個docker網路,

或者使用 --link lnmp_mysql指定。

疑惑解開,動手試試

注意先將資料庫容器名給制定了

參考:https://www.cnblogs.com/makalochen/p/14266075.html#container_name

之後把之前的容器全部刪掉

docker rm -f $(docker ps -qa)

重新啟動

docker-compose up -d

檢視容器名稱

docker ps

重新進入php-fpm容器

docker exec -it a7176ab992b5 /bin/bash

進入程式碼跟目錄執行資料遷移

 php think migrate:run

執行成功,歐耶