【无法连接docker端口映射问题的解决】当筵意气临九霄,星离雨散不终朝。这篇文章主要讲述无法连接docker端口映射问题的解决相关的知识,希望能为你提供帮助。
启动mysql容器
为方便开发,在测试机上用docker开启了一个mysql,并通过端口映射的方法,将容器内的3306 33060端口映射到宿主机的3306 33060端口上。
docker run --name mysql -p 3306:3306 -p 33060:33060 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.38
使用docker port命令可以看到端口映射成功
docker port mysql
33060/tcp -> 0.0.0.0:33060
3306/tcp -> 0.0.0.0:3306
在宿主机上直接telnet 本机的3306端口也是没有问题的
问题
但是想通过DBeaver这个软件从外部访问宿主机ip上的3306端口是却提示超时,telnet 宿主机的3306端口也是同样超时。这说明宿主机的3306端口并没暴露在外。
排查过程
1、关闭selinuxselinux很安全但是很多时候会造成一些不明所以的问题,所以建议关掉
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
2、防火墙拦截一般情况下都是是用iptables更多,所以firewalld就直接关闭了
systemctl stop firewalld
systemctl disable firewalld
3、iptables注意,在生产环境下,iptables要小心操作以免造成安全风险,而且由于docker的端口映射也是通过iptables来实现的,所以直接清空iptables也会带来一定问题。建议在docker正式上线前就执行清理操作系统自带的规则影响操作。如果没能力折腾,最简单的办法就是先清空,然后重启docker,在启动容器
iptables -F
service docker restart
docker start mysql # 因为在前文启动这个容器的时候没有加restart参数,所以需要手动启动
4、sysctl配置如果此时网络还是不通就需要查看一下网络端口使用情况,
可以看到docker容器的端口都是在ipv6下的。
netstate -ntpl
怀疑可能是ipv6转发没有开启,解决方法如下
echo "net.ipv6.conf.all.forwarding=1" > > /etc/sysctl.conf
sysctl -p
至此能遇到的问题大都处理完了。
另外ipv4也同样需要开启转发,但是这个如果么有配置的话,docker在启动过程中会直接抛出错误,应该能直接观察到,所以这里就不写了。
推荐阅读
- firewalld基础操作
- 如何使用WindowsSever2019安装网站程序()
- 史上最全 Appium 自动化测试从基础到框架实战精华学习笔记
- 全流程开发 | 高并发电商服务系统 | 第 6 关 | 登录模块开发
- 公司官网建站笔记(腾讯云服务器CentOS8.2安装界面环境,使用vnc远程登陆并搭建轻量级Qt服务器)
- 数据结构与算法插入排序分析
- oracle拨云见日第8篇之Oracle11.2.0.1.0升级11.2.0.4.3
- 2022 Adobe Certified Professional 世界大赛中国赛区总决赛完美收官
- 路由基础之思科实验ACL Telnet VLAN划分端口聚合的配置