从容器外部连接Docker部署的MySQL数据库失败问题咨询
逻辑错误点说明
1. 端口映射规则理解偏差
你配置的ports: - "8080:3306"遵循Docker端口映射的标准格式宿主机端口:容器内部服务端口:
- 8080是宿主机侧对外开放的端口,仅作用于宿主机的网卡,Docker会将宿主机收到的8080端口请求转发到容器内部的3306端口
- 3306才是容器内部MySQL进程实际监听的端口,该端口仅在Docker内部虚拟网络范围内可见
2. 容器IP的端口使用错误
通过docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器ID拿到的IP属于Docker内部虚拟网络分配的地址,仅支持两类访问场景:
- 和该容器处于同一Docker网络的其他容器
- 宿主机本身(取决于系统Docker的默认网络配置)
访问容器IP时,需要对接的是容器内部服务监听的原生端口3306,而非宿主机侧的8080端口:
你可以尝试在宿主机上使用
容器IP:3306连接MySQL,该方式是可以正常访问的,这才是容器IP的正确用法
3. 外部工具的访问逻辑错误
Workbench等外部工具不属于Docker内部网络范畴,也不是宿主机本地进程,所以无法直接访问Docker虚拟网段的容器IP,只能通过宿主机的局域网/公网IP + 宿主机暴露的8080端口发起请求,由Docker的端口转发机制将请求送达容器内部的3306端口。
内容的提问来源于stack exchange,提问作者Henrique Afonso
相关产品推荐
相关产品推荐

