![无法从 Windows 主机访问容器中的 MySQL](https://linux22.com/image/783737/%E6%97%A0%E6%B3%95%E4%BB%8E%20Windows%20%E4%B8%BB%E6%9C%BA%E8%AE%BF%E9%97%AE%E5%AE%B9%E5%99%A8%E4%B8%AD%E7%9A%84%20MySQL.png)
我在 Windows 11 Professional 工作站上。我按照以下说明在 Docker 中运行容器化的 MySQLhttps://hub.docker.com/_/mysql。它说我需要做的就是运行docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
,tag
用所需的标签替换。我使用latest
了tag
。
为了使工作站上的其他软件可以访问它,我还添加了一个-p 3306:3306
开关。如果我这样做,容器会关闭并显示以下错误:Enter password: mysqld: Can not perform keyring migration : Invalid --keyring-migration-source option.
我剩下的选择是,要么在不使用-p 3306:3306
开关的情况下启动 MySQL(假定它可以运行,但没有什么可以与它对话),要么使用开关运行它-p 3306:3306
,结果却看到它失败。
这该如何运作?
(是的,我看到了类似的问题,但似乎没有一个能回答这个特定的问题。此外,我向容器开发人员打开了一个错误报告,但他们坚持他们的指示。是的,这是一个工作站,但最终将在服务器上运行,我想我会遇到同样的问题。)
答案1
解读下面的注释后,似乎您docker run
在图像名称后添加了参数。这些参数将传递给进程里面容器 - 这可能是您看到 mysqld 错误的原因,因为您正在将 Docker 标志传递给 mysqld。以下答案仍然适用。
我没有使用 Windows,但如果您使用标准客户端连接并在 Docker 中运行服务器,这应该是独立于平台的。
您正确使用了 Docker 命令,这是一个有效的 Docker 命令并且运行正常,公开了端口 3306:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:latest
已启动容器的 Docker 日志显示:
[Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.32' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
该问题可能存在于您的设置中的其他地方,与使用参数运行容器无关-p
。
您确定使用mysql
客户端连接吗?(不是mysqld
)??
启动服务器后的示例连接:
>> mysql -u root -p -h 127.0.0.1 -P 3306
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>