2017-10-15 96 views
0

我無法理解如何讓Laradock正確使用mysql數據庫。Laradock不能與mysql一起工作

我按照laradock文檔和安裝的一切,用

docker-compose up -d nginx mysql 

我有多個項目版本的佈局像這樣

project 
    +laradock-spa 

PHP端似乎工作旋轉起來的容器,我可以得到laravel歡迎頁面,但是獲取數據庫連接導致我的問題。

首先,我應該在哪裏運行php artisan命令,如php artisan migrate?應該從我的機器在項目文件夾中運行,還是從Docker容器內運行?

當我從我的項目文件夾中運行它時,它可以工作,我可以進入mysql容器並查看最初的db表,如migrationuser

,但我不能讓一個初始POST到數據庫內郵差工作 - 我得到錯誤SQLSTATE[HY000] [2002] No such file or directory (SQL: insert into users (...

所以我想,也許我應該從工作空間容器中運行的遷移命令,所以我慶典到工作區,但是從這裏[Illuminate\Database\QueryException] SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schem a.tables where table_schema = spa and table_name = migrations)

正如我所說的,我可以成功進入mysql容器中,並使用root密碼登錄到數據庫,並運行第一次遷移後,我可以看到的php artisan migrate命令錯誤裏面的桌子。

docker ps顯示所有容器。

有人可以解釋它是如何工作的,以及如何解決這個問題?我不知道我應該在哪裏運行哪些命令,以及容器如何相互交流。但基本上,我怎樣才能讓MySQL數據庫在laravel項目中工作?

順便說一句,我有本地的MySQL運行在PC上,也許這是造成一些衝突/混亂?

我在Win10上運行所有這些。

+0

原來,.ENV需要'DB_HOST = mysql'爲了這個工作。仍然困惑,但我會離開這裏,以防萬一它幫助其他人 – yoyoma

回答

2

當您使用Laradock時,您需要考慮容器,就好像它們是在一個共享網絡中的單獨服務器/計算機一樣。下圖中的每個矩形代表一臺擁有自己IP地址的服務器,擁有自己的Linux系統等。因此,要從另一個容器連接到MySQL,您需要知道它是IP地址還是主機名。

幸運的是,Laradock在引擎蓋下提供了一點魔法來緩解這一點,並且您可以使用mysql主機名代替在您的配置中提供IP地址。如果你想啓用redis,你所要做的就是在docker-compose up處啓動redis,並在laravel config中提供redis主機名。

如果涉及到故障排除,​​是檢查發生的最好方法。其餘的是對多容器概念的理解。

請注意,您無法從主機PC連接到您的容器,而無需暴露容器端口docker-compose.yml。容器IP對於主機不可見,因爲它們屬於虛擬網絡,而不是您計算機連接的真實網絡。默認端口已經暴露在docker-compose.yml中,因此您可以通過ip 127.0.0.1和端口3306訪問數據庫,與端口80上的nginx相同,等等。

希望這是一個比較現在很清楚:)

enter image description here