如何解决docker内部访问不了宿主

发布时间 - 2020-06-09 00:00:00    点击率:

在防火墙开启的状态下,docker容器内部无法访问宿主机服务(能够访问非宿主机的其他局域网计算机的服务),解决方法:

1. 配置防火墙规则firewall-cmd --zone=public --add-port={port}/tcp --permanent,并重载防火墙规则firewall-cmd --reload
2. 启动容器时使用--net host模式
3. 关闭防火墙

_补充:由于容器内请求的源地址是使用的docker0网段的内网地址,宿主机防火墙无法识别来源为非宿主机网段的docker0网段的内网地址请求,将其标记为未知来源,于是对请求进行了拦截,可通过添加防火墙来源规则(docker容器默认内网网段为172.17.0.0/16):



进行解决或直接更改防火墙开放端口规则,即解决方法中的第1点进行解决,当然为了更方便,特别时服务个数特别多且端口变化比较快的时候,为了降低维护成本,在保证服务器安全的情况下推荐使用第2或第3点解决方法

这也是微服务docker容器化部署时经常会遇到的坑,A服务访问B服务,当A、B服务同时位于一台宿主机时无法访问,当A、B服务位于不同宿主机时,访问正常。案例如下:

同一宿主机微服务之间通信异常的血案:
微服务A能够正常请求AR
微服务B能够正常请求BR
但是微服务A某请求OR,内部访问BR,始终无法调用成功
原因:
    centos的firewalld为开启状态时,微服务A内部发起请求时,请求无法从容器发出,即出现了调用不成功的情况(No route to host)
矛盾点:
    spring cloud config 启动缓慢导致在测试的时候config服务启动后的一段时间内无法访问,让我们误以为关闭firewalld后无法接收请求,但又和其他服务又能正常访问出现了矛盾
验证:
    docker创建四个nginx(8120、8787、8083、8084)容器,并创建ubuntu容器安装curl。
    开启iptables,关闭firewalld,重启docker,启动五个容器,外部四个nginx访问成功,进入ubuntu容器使用curl访问,均成功
    开启iptables,开启firewalld,重启docker,启动五个容器,外部四个nginx访问成功,进入ubuntu容器使用curl访问,均不成功
    开启iptables,开启firewalld,重启docker,启动五个容器,外部四个nginx访问成功,宿主机配置firewall-cmd --zone=public --add-port=8120/tcp --permanent,进入ubuntu容器使用curl访问,8120访问,其他均不成功
    宿主机配置端口使用iptables转发规则配置无效:
        iptables -A INPUT -p tcp --dport 8120 -j ACCEPT
        iptables -A OUTPUT -p tcp --dport 8120 -j ACCEPT
        iptables -A FORWARD -p tcp --dport 8120 -j ACCEPT
结论:
    无论firewalld开启还是关闭,均不影响外部访问,宿主机需配置firewall-cmd --zone=public --add-port=8120/tcp --permanent(删除端口去掉--zone=public)同一宿主机才能相互访问成功
生产解决方案:
    开启iptables,关闭firewalld
    开启iptables,开启firewalld并配置开放端口
    (开启或关闭firewalld后,需要重启docker)
iptables->ufw(ubuntu)iptables->firewalld(centos)

相关推荐:docker教程


# docker  # 重启  # 解决方法  # 均不  # 内网  # 机时  # 无法访问  # 出现了  # 让我们  # 推荐使用  # 一台 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  nodejs redis 发布订阅机制封装实现方法及实例代码  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  在线制作视频网站免费,都有哪些好的动漫网站?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  node.js报错:Cannot find module 'ejs'的解决办法  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何快速生成ASP一键建站模板并优化安全性?  javascript日期怎么处理_如何格式化输出  微信小程序 五星评分(包括半颗星评分)实例代码  Windows Hello人脸识别突然无法使用  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  PHP正则匹配日期和时间(时间戳转换)的实例代码  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何快速搭建支持数据库操作的智能建站平台?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  如何基于云服务器快速搭建个人网站?  想要更高端的建设网站,这些原则一定要坚持!  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  高端云建站费用究竟需要多少预算?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何破解联通资金短缺导致的基站建设难题?  如何在腾讯云服务器上快速搭建个人网站?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  香港服务器网站卡顿?如何解决网络延迟与负载问题?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  深入理解Android中的xmlns:tools属性  如何在阿里云通过域名搭建网站?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  如何在宝塔面板中创建新站点?  如何快速完成中国万网建站详细流程?  详解MySQL数据库的安装与密码配置  如何快速建站并高效导出源代码?  北京企业网站设计制作公司,北京铁路集团官方网站?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  中山网站推广排名,中山信息港登录入口?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?