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
執行成功,歐耶