簡體   English   中英

連接到另一個運行MariaDB的Docker容器時,MYSQLI連接被拒絕

[英]MYSQLI Connection refused when connecting to another docker container running MariaDB

我開始不習慣使用Docker,並且試圖使我的PHP應用程序在帶有nginx的Docker容器中運行,以連接到在另一個運行MariaDB的容器中運行的數據庫。

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

警告:mysqli_connect():(HY000 / 2002):第7行> /app/web/php/db-config.php中的連接被拒絕無法連接到數據庫,並因錯誤而終止:

發生錯誤的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:');

所有docker-compose.yml文件內容都在存儲庫中。

我想念什么?

我設法在答案中找到解決方案。

問題在於主機不是要定義為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:');

不需要鏈接即可使服務進行通信-默認情況下,任何服務都可以使用該服務的名稱訪問任何其他服務。

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

您應該將端口容器/瀏覽器明確指定為-p 3306:3306:

docker run --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM