2017-04-01 52 views
0

我開始讓Docker與自己的手變髒,並且我試圖讓我的PHP應用程序在運行於另一個Docker容器中的nginx連接到另一個運行的數據庫運行MariaDB的容器。當連接到運行MariaDB的另一個Docker容器時,MYSQLI連接被拒絕

當我運行容器時,我可以無任何問題地從我的計算機連接到數據庫(使用Sequel Pro),但是當我嘗試從運行在nginx容器中的PHP應用程序連接到數據庫時,我得到以下mysqli錯誤:

Warning: mysqli_connect(): (HY000/2002): Connection refused in >/app/web/php/db-config.php on line 7 Failed to connect to the database, died with error:

的DB-config.php文件,其中的錯誤發生如下:

define('DB_HOST', '0.0.0.0:3306'); 
    define('DB_NAME', 'Jumpooling'); 
    define('DB_USER', 'root'); 
    define('DB_PASSWORD', 'root'); 

    $con=mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Failed to connect to the database, died with error:'); 

所有的碼頭工人,compose.yml文件內容爲this庫。

我錯過了什麼?

+0

你兩次定義端口.. – chris85

+0

感謝您指出了這一點,克里斯! 我試圖在DB_HOST和mysqli_connect調用中只定義一次,並且它沒有鍛鍊,所以我可能試圖把它放在兩個地方,就像測試結束時複製和舊版本的文件一樣。 即使只定義一次,它仍然無法正常工作! –

回答

3

我設法找到this答案的解決方案。

問題是主機不是被定義爲IP地址,而是在docker-compose.yml文件中給出的鏈接名稱,即db

最後db-config.php是這樣的:

define('DB_HOST', 'db'); 
define('DB_NAME', 'Jumpooling'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', 'root'); 

$con=mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, 3306) or die('Failed to connect to the database, died with error:'); 
0

鏈接並不需要啓用服務進行通信 - 默認情況下,任何服務可以在該服務的名稱及任何其他服務。

鏈接服務的容器將可以在與別名相同的主機名上訪問,如果未指定別名,則可以訪問服務名稱。

0

你應該明確地指定港口集裝箱/瀏覽器作爲-p 3306:3306:

docker run --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest 
相關問題