mysql docker容器 - 无法与Windows连接

Posted

技术标签:

【中文标题】mysql docker容器 - 无法与Windows连接【英文标题】:mysql docker container - cannot connect with windows 【发布时间】:2021-06-30 04:13:15 【问题描述】:

非常抱歉,我在 *** 上找到了几个主题,但没有一个能解决我的问题。我是一个 docker noob,但我想要做的就是在通过 windows 上的 docker-desktop 创建的 docker 容器中连接到我的 docker mysql 数据库。

docker run -p 3306:3306 --name blaaa -e MYSQL_ROOT_PASSWORD=password -d mysql

我使用建议的端口映射设置了所有内容,但我无法通过 mysql-workbench 或其他程序从主机(Windows 10)连接到 docker 容器。我读到有问题,您经常无法通过 localhost 连接到 docker 主机,但我什至无法弄清楚 docker0 或其他适配器的怪异 ip 是什么(ipconfig 没有显示任何内容)。 docker inspect <id> 显示了很多信息,但是除了映射到 0.0.0.0:3306 和其他不起作用的 ip 之外,我真的不知道在这里做什么。容器本身运行良好,我可以从容器内部毫无问题地访问数据库。

感谢您的帮助!

/已解决

我很抱歉造成混乱;我认为这是由于 Windows 客户端(我尝试了几个)导致事情没有成功。我终于让它与 HeidiSQL 一起工作。不要问我 HeidiSQL 最终是如何或为什么起作用的;但是 mysql-workbench 在我的系统上通常表现出奇怪的行为,它突然崩溃了好几次。感谢您的帮助。

【问题讨论】:

docker inspect -f 'range .NetworkSettings.Networks.IPAddressend' container_name 使用它来获取容器的 ip 感谢您的回答。我实际上得到了ip,但我仍然无法连接...... 我是否正确理解这一点,如果有来自外部的服务尝试连接,日志至少应该记录一些内容?因为他们没有提到任何东西......我只是想弄清楚这个问题是否与容器或mysql-workbench有关...... 您是如何尝试连接到容器的? @antoniomerlin 您无法访问 Windows 或 MacOS 主机上的 Docker 私有 IP 地址,或者如果您不在同一物理主机上,或者如果涉及 VM,或者...。您永远不需要查找它们。 【参考方案1】:

嘿嘿,不指定数据库名的时候,容器一创建就停止,所以指定数据库名作为环境变量

这是 docker 命令:

docker run -p <host_machine_port>:3306 --name <container_name> -e MYSQL_ROOT_PASSWORD=<root_password> -e MYSQL_DATABASE=<db_name> -d mysql

在你的情况下:docker run -p 3306:3306 --name blaaa -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE= testDB -d MySQL

接下来验证容器是否正在运行:docker ps 如果它显示了您在创建它时指定的容器名称,则它正在运行。

接下来连接到您的容器:mysql --host=127.0.0.1 --port=3306 -u root -p password

【讨论】:

感谢您的帮助!但是,我不确定您是否真的需要先定义一个数据库......容器似乎运行良好,没有任何初始数据库。然而,你是对的,Docker Hub 上的 mysql repo 提到了问题when not initializing a db first。但是,即使我设置了初始数据库,我也无法通过 Windows 访问数据库......但是 WSL 工作正常。 你能在我向你建议的命令之后告诉我 docker ps 结果吗?你如何在没有名字的情况下连接到数据库?? 哦,伙计。你在wsl上运行docker容器并试图在windows中访问?? ? Windows 上的 Docker 桌面基于 WSL 2.0。顺便说一句,我尝试在定义和不定义 mysql_database 的情况下运行容器,两者都运行良好。但你是对的,这可能是问题......因为 docker desktop 似乎是基于 wsl 的,也许这会导致问题。对不起,我根本不知道这整个事情是如何在 Windows 下工作的。但我也可以通过 Windows 上的 localhost 访问在容器中运行的其他 Web 应用程序。也许这真的是 mysql-workbench 的一个问题......或者我在其他地方搞砸了(这也很可能)。 我从未使用过 doxker 桌面,所以我真的不知道发生了什么,但如果我找到解决方案,我会告诉你?【参考方案2】:

这行得通

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3307:3306 mysql

这里解释的原因 -p 是一个论点

https://github.com/docker-library/mysql/issues/504

【讨论】:

以上是关于mysql docker容器 - 无法与Windows连接的主要内容,如果未能解决你的问题,请参考以下文章

无法将 mysql docker 容器与 Spring Boot 应用程序链接 - 通信链接失败

无法使用 docker 容器连接到 MySQL 数据库

Spring Boot + MySQL docker 容器

docker容器跑起mysql后,在宿主机无法进去mysql?

Mariadb docker容器无法使用Python连接到主机上的MySQL服务器(111连接被拒绝)

docker nodejs容器无法连接mysql容器