首页 > 运维 > Docker > 正文

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

WJ
发布: 2020-06-09 16:30:27
原创
5008人浏览过

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

在防火墙开启的状态下,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):

<rule family="ipv4">
<source address="172.17.0.0/16" />
<accept /></rule>
登录后复制

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

百度虚拟主播
百度虚拟主播

百度智能云平台的一站式、灵活化的虚拟主播直播解决方案

百度虚拟主播36
查看详情 百度虚拟主播

这也是微服务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内部访问不了宿主的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号