两个链接容器之间的连接失败:apache2/php & mysql

connection failed between two linked containers : apache2/php & mysql

我的两个容器:

容器 1:

        - name: boxoffice
        - containerPort : 80
        - hostPort: 3030
        - service installed : apache2 and php

命令运行容器1:

docker run  --name=boxoffice -p 3030:80 -v /Users/mac/Desktop/storage-web:/var/www/app -d  --link=db medoneapache:latest

容器 2:

        - name: db
        - containerPort : 3306
        - hostPort: 3306
        - service installed : mysql

命令运行容器2:

docker run --name=db -p 3306:3306   -v /Users/mac/Desktop/storage-db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=medone -d  mysqlmedone:1.0

i link通过 --link=db

将第一个容器 "boxoffice" 编辑到第二个容器 "db"

我创建了一个 php 文件来测试 mysql 连接,该连接有一个名为 profil

的数据库

连接-php-mysql.php (/var/www/app) 在 "boxoffice" 容器中:

<?php
$servername = "db";
$username = "root";
$password = "medone";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

这是我得到的错误:

警告:mysqli_connect():服务器请求的身份验证方法对客户端 [caching_sha2_password] 未知,在 /var/www/app/index.php 在线7

警告:mysqli_connect(): (HY000/2054): 服务器在 /var/www/app/index.php 上请求客户端未知的身份验证方法第 7 行 连接失败:服务器请求客户端未知的身份验证方法

我检查了第一个容器以获取主机 ip 地址:172.17.0.2 并将其替换为 db 作为服务器名,但我得到了同样的错误

而且我无法将用户名作为 root 获取错误:

mysql -u root

错误 1045 (28000):用户 'root'@'localhost' 的访问被拒绝(使用密码:否)

您需要升级到 PHP 7.4.4.

仅在 PHP 7.4.4 中的 mysqli 和 PDO 中添加了对 caching_sha2_password 的支持。

相关功能请求:https://bugs.php.net/bug.php?id=79275
GitHub 公关:https://github.com/php/php-src/pull/5210