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后,在宿主机无法进去mysql?