PHP 脚本连接到 MySQL Docker 容器 :: 我做错了什么?

PHP Script Connecting to MySQL Docker Container :: What Am I Doing Wrong?

我有一个 MySQL Docker 容器 运行,我需要一个 PHP 脚本来连接到容器以执行数据库操作。我的脚本不工作,我不知道它是脚本还是容器。

首先,我的系统。我在 Ubuntu 16.04.7 机器上开发,运行 Docker 20.10.7,应该是最新的。我的 MySQL 容器是从 Docker 集线器中提取的(docker pull mysql 提取了图像 ID 667ee8fb158e)。我用这个命令启动了容器:

docker run --detach --name=myMYSQL -p 52000:3306  --env="MYSQL_ROOT_PASSWORD=password123" 667ee8fb158e

注意这里的端口映射。对于这个post,原因太多了,这个映射是必需的。这可能是后来导致我的脚本错误的原因,我不知道。

在讨论我的脚本之前,我手动连接到数据库并做了一些管理工作:

mysql>
mysql> CREATE USER 'user01'@'localhost';
Query OK, 0 rows affected (0.02 sec)

mysql> SET PASSWORD FOR 'user01'@'localhost' = 'password123';
Query OK, 0 rows affected (0.01 sec)

mysql> create database myDB;
Query OK, 1 row affected (0.05 sec)

mysql> GRANT ALL PRIVILEGES ON myDB.* TO 'user01'@'localhost';
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for 'user01'@'localhost';
+-------------------------------------------------------------------------+
| Grants for user01@localhost                                             |
+-------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON `myDB`.* TO `user01`@`localhost`                |
+-------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

好的,现在是 PHP 脚本。在为 mysql-client-core-5.7php-mysql 执行 apt-get install 之后,我使用了以下脚本:

<?php
$servername = "127.0.0.1";
$username = "user01";
$password = "password123";
$database = "myDB";
$mysqlPort = "52000"
// Create connection
$conn = mysqli_connect($servername, $username, $password, $database, $mysqlPort, null);
// Check connection
if (!$conn) {
    die("OH NO!!!  Connection has failed, dude: " . mysqli_connect_error());
}
echo "Excellent, connected successfully!!!";
mysqli_close($conn);
?>

(请注意我在这里如何使用 mysqli_connect(),如果我使用“127.0.0.1”作为 $servername,我将强制建立 TCP 连接并且我不会不需要提供 $socket。这对我来说很好,因为我需要一个 TCP 连接。)

但是,脚本失败了。这是命令行输出:

me@myUbuntu:~$
me@myUbuntu:~$ php phpMySQL.php
PHP Warning:  mysqli_connect(): (HY000/1045): Access denied for user 'user01'@'10.10.10.10' (using password: YES) in /home/me/phpMySQL.php on line 8
OH NO!!!  Connection has failed, dude: Access denied for user 'user01'@'10.10.10.10' (using password: YES)me@myUbuntu:~$

哎呀。许多 Google 搜索暗示我的脚本已成功连接到 MySQL 容器,但被拒绝了?可能是。遗憾的是,我无法启用 MySQL 错误日志来确认。但我不禁想知道我的端口映射是否会回来咬我并且脚本从未成功到达容器?我希望我知道。有人有建议吗?谢谢。

我认为你的赠款应该在 10.10.10.10。

GRANT ALL PRIVILEGES ON `myDB`.* TO `user01`@`10.10.10.10`

确保用户也是@10.10.10.10