Docker学习笔记(十一)宿主机无法链接宿主机问题处理

发布于:2025-03-26 ⋅ 阅读:(22) ⋅ 点赞:(0)

故障排查优先级排序

  1. 服务状态 → 2. 端口监听 → 3. 防火墙 → 4. 权限配置 → 5. 网络路由
    (按此顺序可覆盖95%的常见问题‌15)

mysql镜像启动命令:

docker run  -p 3306:3306 --restart=always --name  mysqlv8 -e MYSQL_ROOT_PASSWORD=Cde12345  -d 172.16.156.128:80/wj_demo/mysql:v8

镜像启动以后在虚拟机上telnet ip+端口时可以访问通,但是在宿主机上不通

排查步骤:

1、重启镜像、重启docker

2、宿主机测试

# 宿主机执行
ping <虚拟机IP>          # 确认网络层可达‌:ml-citation{ref="2,7" data="citationList"}
telnet <虚拟机IP> 3306  # 失败则说明端口未开放‌:ml-citation{ref="5" data="citationList"}

3、查看端口监听

netstat -tunlp | grep 3306  # 确认 MySQL 正在监听 0.0.0.0:3306‌:ml-citation{ref="5,7" data="citationList"}

4、调整防火墙规则

关闭虚拟机的防火墙或者映射对应端口

关闭宿主机的防火墙(因为我第一次安装可以使用,重启以后无法使用,宿主机防火墙一直开启状态,所以我的没关闭,一直保持打开状态)

5、配置 MySQL 远程访问权限

-- 虚拟机内登录 MySQL
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '密码';  
FLUSH PRIVILEGES;  # 刷新权限‌:ml-citation{ref="6,7" data="citationList"}

6、修改绑定地址

我的就是这里出的问题,重启虚拟机以后没有了这个映射

sudo vi /etc/mysql/my.cnf  # 添加或修改
[mysqld]
bind-address = 0.0.0.0     # 允许所有IP连接‌:ml-citation{ref="1,5" data="citationList"}
systemctl restart mysql    # 重启生效‌:ml-citation{ref="7" data="citationList"}

7、排查配置文件冲突

检查 /etc/mysql/my.cnf 是否包含:
skip_networking          # 禁用网络连接(必须注释)‌:ml-citation{ref="5" data="citationList"}
skip_grant_tables        # 可能导致端口监听异常(建议注释)‌:ml-citation{ref="5" data="citationList"}


修改后重启服务:systemctl restart mysql

8、杀手锏(高级检查)

抓包分析网络流量
# 虚拟机内执行
tcpdump -i eth0 port 3306  # 观察宿主机请求是否到达‌:ml-citation{ref="5" data="citationList"}

‌路由表检查
route -n  # 确认默认网关正确指向宿主机‌:ml-citation{ref="2,8" data="citationList"}


网站公告

今日签到

点亮在社区的每一天
去签到