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

时间:2017-04-01 14:52:58

标签: 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拒绝连接   无法连接到数据库,因错误而死亡:

发生错误的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文件内容都在this存储库中。

我错过了什么?

3 个答案:

答案 0 :(得分:9)

我设法在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:');

答案 1 :(得分:0)

启用服务进行通信不需要链接 - 默认情况下,任何服务都可以通过该服务的名称访问任何其他服务。

链接服务的容器可以在与别名相同的主机名上访问,如果没有指定别名,则可以访问服务名称。

答案 2 :(得分:0)

您应该将ports container / browser明确指定为-p 3306:3306:

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