繁体   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