Linux虚拟机挂起后重启,Navicat无法连接Docker MySQL容器

问题

将虚拟机挂起后再次重启,但是 Navicat 工具却无法连接 Docker MySQL 容器。

情况

1、Linux 虚拟机防火墙已关闭
2、使用 XShell 工具可以连接并登录 Linux 虚拟机
3、Docker 服务启动无问题,并且 Linux 本地可以使用 Docker 命令登录 MySQL 容器
4、Linux 虚拟机网络无问题,Linux 虚拟机可以访问外部网络,Windows 也可以 ping 通 Linux 虚拟机

解决方法

临时解决方法

重启网络和 Docker 服务,重启 Docker MySQL 容器,这种方法只对本次 Linux 运行期间有效,如果重新将 Linux 虚拟机挂起,那么依然会有这种问题,需要再次执行以下命令才能 Dokcer 容器的网络为。

systemctl restart NetworkManager docker
docker start mysql

彻底解决方法

创建并编辑文件 /etc/NetworkManager/conf.d/10-unmanage-docker-interfaces.conf ,文件内容如下:

[keyfile]
unmanaged-devices=interface-name:docker*;interface-name:veth*;interface-name:br-*;interface-name:vmnet*;interface-name:vboxnet*

然后重新启动 NetworkManager 服务 和 Docker 服务。

systemctl restart NetworkManager docker
docker start mysql

这种解决方法,即便以后再将 Linux 虚拟机挂起,依然不会出现无法连接 Docker 容器网络的问题。

### 如何使用 Navicat Premium 连接Docker 中的 MySQL 数据库 要通过 Navicat Premium 成功连接Docker 容器中的 MySQL 数据库,需按照以下方法操作: #### 1. **确认 Docker 容器正常运行** 确保 Docker 已成功启动 MySQL 容器,并验证其状态。可以执行以下命令来查看容器的状态: ```bash docker ps ``` 此命令会显示当前正在运行的所有容器及其端口映射情况。 如果未找到名为 `docmysql` 的容器(假设这是您命名的),可以通过以下命令重启它: ```bash docker start docmysql ``` #### 2. **检查 MySQL 容器的网络配置** MySQL 容器需要暴露一个外部可访问的端口以便 Navicat 可以连接。在创建容器时使用的 `-p 3306:3306` 参数已经完成了这一设置[^1]。 为了进一步确认,可通过以下命令获取容器的具体 IP 地址和端口号: ```bash docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docmysql ``` 这将返回容器内部的 IPv4 地址。然而,在大多数情况下,可以直接使用本地主机地址 (`localhost`) 或者 `127.0.0.1` 来建立连接。 #### 3. **Navicat Premium 配置步骤** ##### (a) 创建新连接 打开 Navicat Premium 软件,点击左上角的“新建连接”,选择“MySQL”。 ##### (b) 设置基本参数 填写以下字段: - **Connection Name**: 自定义名称,例如 `Docker_MySQL`. - **Host Name or IP Address**: 如果是在同一台机器上运行 DockerNavicat,则输入 `127.0.0.1` 或 `localhost`. 若是远程服务器,请替换为主机的真实公网 IP。 - **Port Number**: 默认为 `3306`, 即容器中指定的端口映射值. - **Username**: 使用默认管理员账户名 `root`. - **Password**: 初始化时设定的密码,如例子中的 `123456`. ##### (c) 测试连接 完成上述配置后,单击右下角的 “测试连接” 按钮。如果没有错误提示,则表示一切准备就绪;否则可能涉及防火墙规则或其他环境因素干扰通信过程[^2]. #### 4. **处理常见问题** 当遇到诸如错误码 `10061` 或 `10060` 等连接失败的情况时,应考虑以下几个方面的原因分析与排查措施[^3]: - 是否正确设置了时间区域变量(-e TZ),因为某些场景下不匹配可能导致认证异常; - 查看是否存在多余的空白字符影响解析逻辑(比如 conf 文件内的不当换行现象); - 清理残留的历史数据路径(/usr/local/mysql/*), 并重新构建干净实例. --- ### 示例代码片段 以下是用于调试的一个简单脚本,帮助定位潜在的问题源: ```bash #!/bin/bash echo "Stopping existing container..." docker stop docmysql || true docker rm docmysql || true echo "Starting fresh instance of MySQL with updated settings..." docker run \ --name docmysql \ -p 3306:3306 \ -v /usr/local/mysql/conf:/etc/mysql/conf.d \ -v /usr/local/mysql/logs:/logs \ -v /usr/local/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=your_secure_password_here \ -d mysql:5.7 ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值