Php 当连接到另一个运行MariaDB的docker容器时,MYSQLI连接被拒绝

Php 当连接到另一个运行MariaDB的docker容器时,MYSQLI连接被拒绝,php,docker,mysqli,docker-compose,mariadb,Php,Docker,Mysqli,Docker Compose,Mariadb,我开始使用Docker,我试图让我的PHP应用程序运行在一个带有nginx的Docker容器中,以连接到运行MariaDB的另一个容器中的数据库 当我运行容器时,我可以毫无问题地从我的计算机(使用Sequel Pro)连接到数据库,但是当我尝试从运行在nginx容器中的PHP应用程序连接到数据库时,我得到以下mysqli错误: 警告:mysqli_connect():(HY000/2002):第7行>/app/web/php/db-config.php中的连接被拒绝 无法连接到数据库,已死亡,错

我开始使用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

您定义了两次端口..谢谢您指出这一点,Chris!我在DB_主机和mysqli_connect调用中只定义了一次,但没有成功,所以我可能尝试将它同时放在这两个版本中,因为测试结束时复制了文件的旧版本。即使只定义一次,它仍然不起作用!选择这个答案作为最佳答案。别害羞