Docker MySQL 的实例没有设置 root 密码 -- 允许任何没有密码的登录

Docker instance of MySQL is not setting root password -- any login without a password is allowed

我设置了一台新计算机 运行ning macOS 10.14.5 和 Docker 桌面社区 2.0.0.3 (31259),我注意到我的 MySQL 容器没有被正确创建。这是我在以前的计算机上 运行 的命令:

docker run --name virtual-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypassword -d mysql:5.7.22

有效:它将正确设置 root 密码。但是在新计算机上,当我 运行 该命令时,未设置 root 密码。我可以以 root 用户身份登录,但前提是我将密码留空。只有 root 用户可以创建数据库。

但更奇怪的是,我可以将任何内容指定为用户,例如asdf 并成功登录 (!!!)。当我以不存在的用户身份登录时,我只能查看 information_schema 而无法创建数据库,但是 - 我收到错误:Access denied for user ''@'localhost' to database 'asdf' - 这表明我的客户可能是' 正确发送登录凭据(我使用 Sequel Pro 1.1.2 作为我的 MySQL 客户端)。

谁能解释一下这种奇怪的行为?

经过一些有用的推动,我弄清楚了 rails 的问题所在。

第一个问题:我安装的一个应用程序在主机 OS 上安装了一个 MySQL 的实例。我没有注意到它,因为我是从一个没有更新 PATH 的开放式终端 window 完成的 which mysql

第二个问题:mysqld 保留了 运行 绑定到端口 3306 的进程。 直到 运行 lsof -Pnl +M -i4 | grep 'LISTEN'lsof -Pnl +M -i4 | grep 'LISTEN' 透露出来我才注意到这一点。当我可以提出绑定到其他端口的新 dockerized 实例时,我有我的怀疑。

所以解决方案是彻底删除 mysql(和 mysqld),然后重新启动以摆脱任何悬空连接。一旦我这样做了,我的 dockerized 版本 运行 很好。