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

我开始用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文件内容都在这个仓库中。

我错过了什么?

我设法find答案的解决scheme。

问题是主机不是被定义为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