- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章一次centos Docker网桥模式无法访问宿主机Redis服务的故障排除经历由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
背景:
之前做了一个项目,需要在容器内访问宿主机提供的redis 服务(这是一个比较常见的应用场景哈), 常规方案:
① 主机网络(docker run --network=host): 完全应用主机网络堆栈,在容器内localhost就是指向宿主机 。
② 网桥网络(docker run --network=bridge): 这也是docker容器默认的网络通信模式,容器内localhost 指向的是容器自身,不能使用 localhost 访问宿主机上localhost:6379承载的redis服务 .
docker会默认建立docker0 网桥; 。
网桥有一个网关ip, 有一个子网段; 网桥内容器从子网段中确定容器ip( ip addr eth0), 网桥内容器可通过 service name相互访问; 。
网桥内容器通过 docker0 getway得以访问外网.
不做骚操作,沿用常见的②网桥模式:
第一步:自定义网桥并应用该自定义网桥 。
1
|
docker network create --gateway 172.16.1.1 --subnet 172.16.1.0
/24
app_bridge
|
1
2
3
4
5
6
7
8
|
docker run --network=app_bridge --name ......
# 以下截取自docker-compose.yml文件
......
networks:
default:
name: app_bridge
external:
true
|
为啥不利用默认docker0网桥?
本文开头已讲: docker0 是默认网桥,新建的容器默认都会加入这个网桥,所以我们需要建立一个专属于本程序的网桥app_bridge 。
第二步:容器内建立 对应于宿主机的别名 。
为实现在容器内网桥模式访问宿主机localhost:6379 的服务, 必须搭配docker 提供的 --add-host 选项(对应到docker-compose.yml这个配置是extra_host).
1
2
3
4
5
6
7
8
9
10
11
|
docker run 的--add-host 选项能在 容器
/etc/hosts
文件增加行记录,便于我们使用该名称访问其他网络。
docker run -it --add-host dockerhost:172.16.1.1 ubuntu
cat
/etc/hosts
172.17.0.22 09d03f76bf2c
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
172.16.1.1 dockerhost
|
之后在程序的配置文件即可应用 dockerhost:6379 访问宿主机redis服务.
------------------------------------------ 稍熟悉docker网络模型的朋友应该 都能理解并完成上述操作----------------------------------------------------- 。
一个状况:
我在公司centos7机器上使用上述操作, 容器内一直无法连通宿主机(容器间还是能正常访问).
简化问题测试:新建容器,在容器内尝试ping docker0 网关, 哔了狗了,4台公司机器都ping不通docker0网关,外网还是正常访问.
那这个问题就成了: 使用默认的docker0网桥,容器内无法ping通docker0网关,进而无法访问宿主机.
呀呀呀呀, 八成是公司机器的配置问题 ~。。~ 。
追问公司运维同学,发现:
chain input (policy drop) 。
以上input链的缺省策略是丢弃:从容器内访问宿主机的input链规则并不匹配其中列出的任意一条,将被丢弃,所以我们从容器ping docker0网关会卡住收不到结果.
除非满足列出的input链规则,否则缺省的策略就是丢弃.
后面还有转发和output链缺省是 接受 。
这个策略的初衷是 服务器安全(尼玛, 导致容器访问宿主机的基础能力都没有了!!!).
运维方案:
① 使用 sudo service iptables stop 关闭iptables 。
② 把要使用的网桥网段加入 input链 。
sudo iptables -i input -s 172.17.0.0/16 -j accept 。
【接受docker0子网段172.17.0.0/16 input】 加入规则, 传送门 。
ok, that‘s all, 以后若有朋友在公司网络遇到 默认网桥容器内无法ping通网桥网关,进而无法访问宿主机,可参考本文排障.
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我的支持.
原文链接:https://www.cnblogs.com/JulianHuang/p/11636825.html 。
最后此篇关于一次centos Docker网桥模式无法访问宿主机Redis服务的故障排除经历的文章就讲到这里了,如果你想了解更多关于一次centos Docker网桥模式无法访问宿主机Redis服务的故障排除经历的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有人可以解释一下为什么这个脚本不起作用吗? function destroy(ID) { if (confirm("Deleting is a very bad thing! Sure?")
我正在尝试使 WCF Silverlight 故障按此方式工作: MSDN aricle 将 SL 故障添加到我的 Web.config 文件后,我收到以下警告: The element 'behav
这是我要删除的 Haskell 函数 2::Int和 5::Int从列表中: remPrimesFactors25 :: [Int] -> [Int] remPrimesFactors25 [] =
当我想用 ffmpeg 连接和录制两个 mp4 视频时,我遇到了这个问题。我得到的输出是: [concat @ 0x2566e80] DTS 4079 #0:0 (h264 (native) ->
我想在delphi中编写一个程序来模拟以特定速度移动的鼠标指针(类似于AutoIT MouseMove函数)。要么是我的代码错误,要么是 SetCursorPos 在被调用太多次后出现故障。这是我的功
我将“wa、or 和 id”(来自这些州的访问者)设置为重定向到 website1.com - 当我访问该网站时,它会将我重定向到 website1.com(因此它知道我在 WA) 。但如果我将 wa
我们目前正在争论通过 WCF channel 抛出错误与传递指示状态或服务响应的消息是否更好。 故障带有 WCF 的内置支持,您可以使用内置的错误处理程序并做出相应的 react 。然而,这会带来开销
不确定我在这里做错了什么,如果有任何帮助,我们将不胜感激。 尝试创建一个名为“control”的新变量,并在行变量等于这些数字时将其编码为 1,否则编码为 0。 data$control= ifels
我想在应用洞察中记录成功调用的百分比。我看到这篇文章https://learn.microsoft.com/en-us/azure/azure-monitor/app/sampling我认为固定速率采
我正在尝试使用 SVD 和特征分解来使用动态模式分解进行一些数据分析。我遇到了一个简单的问题,即从 Matlab 和 Python 获得不同的结果。我很困惑,不知道为什么 Python 给我错误的结果
This question already has an answer here: mysqli_fetch_assoc() expects parameter / Call to a member
我刚刚开始我的一个实验室,在那里我计算类(class)的 GPA,其信息存储在结构的链接列表中。截至目前,我正在尝试打印所有类(class)信息,以确保它们已正确初始化并添加到链接列表中。 我遇到了一
我正在尝试学习如何使用 visual studio 为 C++ 制作 GUI。但是我在使用 GetWindowText() 函数时遇到了一些问题。它不会将 LPTSTR 标题更改为文本框中的文本,并且
我有一个奇怪的问题。它似乎只出现在测试者的 iPhone 5s 上。它可以在运行最新 iOS (8.3) 的 iPhone 5、6 和 6 plus 上正常运行。 这是代码 -(NSString *)
我正在尝试更新 Core Data 中的一些记录。我正在采取以下步骤来完成它 带谓词的获取函数从核心数据中检索记录 将结果集存储在对象数组中 遍历数组并更新每条记录 调用保存上下文 我遇到了两个问题
我通过 Storyboard设计了 tableView,在一个单元格中我有一个按钮和一个标签。按钮在 Storyboard上有标签 1 和标签在 Storyboard上有标签 2。在 cellForR
我实现了这个方法,当在文本字段中输入了未经授权的字符或已使用的用户名时,向用户发送多个警报 View : func textFieldShouldEndEditing(textField: UITex
伙计们,我在运行程序时遇到了这个非常奇怪的错误。这是重要的代码: 变量(编辑): const short int maxX = 100; const short int maxZ = 100; con
我有这个修改过的 Matrix Javascript 代码,我想摆脱第一次运行的所有与自身重叠的字符串。有人知道我该如何管理吗?另外,我想在我的网页上多次使用此代码,我需要声明新变量,不是吗?但是当我
有谁知道是否有网站(甚至非 Microsoft)有关于 COMExceptions/HRESULTS 的详细信息。 当我尝试在使用 Copy() 函数后保存我的 Excel 工作簿时,我收到此错误:
我是一名优秀的程序员,十分优秀!