Docker网络相关内容

标签: Docker 分类: 软件 创建时间:2020-03-13 02:00:13 更新时间:2024-11-15 10:49:43

这篇文章的主要目的是这样的,实验目标,就是安装了CentOS,然后想要通过Win10能ping通CentOS。我的系统是win10,安装了Hyper-V版的Docker。

1.安装ifconfig命令

CentOS安装后,没有ifconfig命令。

1
2
3
4
## 查找
yum search ifconfig
## 安装ifconfig
yum install net-tools.x86_64

2.windos上增加路由映射

(1) 使用 ifconfig 查看容器CentOS的ip:

(2) 可以看到Docker中的网络是以172.17.0.0为前缀的。参考文章中提到了一个Docker Quickstart Terminal 工具,启动这个工具就可以查看docker的IP,但是我没有找到这个工具。右键右小角小鲸鱼图标,然后打开setting->Resources->Network,可以看到这里有个Docker subnet网络,那就当成docker的IP进行处理试试。

(3) 然后打开win10的powershell,在window10中添加路由:

1
route add -p 172.17.0.0 mask 255.255.0.0 192.168.65.0

使用ping进行测试,结果不行。在多次增加路由和删除路由的过程中,我发现了一个奇怪的现象,有些直接返回的是请求超时,有的返回的是无法访问主机。是不是因为linux防火墙或者docker防火墙的原因呢?还有一个奇怪的地方,就是在docker的虚拟机centos中可以ping通windows主机,也可以ping通windows主机所在的网关。而反过来就不行。

(4) 尝试
在windows上使用ipconfig命令,查看到了Docker创建的虚拟网卡的ip地址是192.168.78.113,无论从windows去ping这个地址,还是从虚拟机里ping这个地址,都是可以ping通的。

然后我有尝试添加了新的路由

1
2
3
4
5
6
## 删除路由
route delete 172.17.0.0
## 查看路由
route print
## 添加路由
route -p add 172.17.0.0 MASK 255.255.255.240 192.168.78.113

(5) 继续尝试,通过参考资料,虽然界面不太一样,但是基本上都是一个样的操作,首先windows上ipconfig,查看vEthernet的ip地址;然后设置Docker的NetWork,为这个ip;最后使用route为windows添加路由。有一点不同的是,别人的vEthernet的ip地址都是10.0.75.1,而我的是192.168.78.113

(6) 我又想起来了,网上很多都是使用的Docker Toolbox安装,可以使用iptables修改toolbox启动的默认docker machine的防火墙规则,但是我使用的是Docker for Windows安装的,没有iptables这个东西。那会不是是Hyper-V的防火墙呢?
结果很不如人意,因为我的防火墙已经关闭了。

(7) 最后放弃ping的想法了。还是老老实实的的做端口映射吧。

3.端口映射

端口映射可以在调用docker run是进行指定,

1
2
## 将虚拟机的80端口映射到主机上
docker run --name nginx -d -p 8081:80 nginx

4.docker-compose网络

不设置networks,会默认的创建一个,所有的容器都会加入到这个网络中,并进行命名,所以才可以通过容器名的方式访问相关的容器。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。