![](/img/trans.png)
[英]docker-compose, WordPress and MariaDB, PHP Fatal error: Uncaught mysqli_sql_exception: Connection refused
[英]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.