内容简介:通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务。docker守护进程就是通过docker0为docker容器提供网络连接的各种服务。docker0 就是Linux的虚拟网桥 。OSI七层模型中的网桥:
通过ifconfig查看 docker 0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务。
[root@localhost ~]# ifconfig docker0 docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:2fff:fe56:7b2e prefixlen 64 scopeid 0x20<link> ether 02:42:2f:56:7b:2e txqueuelen 0 (Ethernet) RX packets 27406 bytes 2657911 (2.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 42036 bytes 58020300 (55.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 复制代码
docker守护进程就是通过docker0为docker容器提供网络连接的各种服务。docker0 就是 Linux 的虚拟网桥 。
OSI七层模型中的网桥:
Linux虚拟网桥的特点:
- 可以设置IP地址
- 相当于拥有一个隐藏的虚拟网卡
docker0的地址划分:
- IP:172.17.42.1 子网掩码: 255.255.0.0
- MAC: 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff
- 总共提供65534个地址
docker守护进程在一个容器启动时,实际上它要创建网络连接的两端。一端是在容器中的网络设备,而另一端是在运行docker守护进程的主机上打开一个名为veth*的一个接口,用来实现docker这个网桥与容器的网络通信。
下面我们看一下实际的过程: 需要查看网桥,需要linux的网桥管理程序,在Ubuntu中通过 apt-get install bridge-utils。
$ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.0242ed943d02 no 复制代码
运行一个docker容器,在容器中查看它的网络设备(如果没有ifconfig命令,通过apt-get install -y net-tools)。
root@b2a3136f5425:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:145 errors:0 dropped:0 overruns:0 frame:0 TX packets:60 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:184985 (184.9 KB) TX bytes:4758 (4.7 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 复制代码
docker已经自动创建了eth0的网卡,注意观察ip地址和mac地址。不要退出容器,再运行如下查看网桥的状态。
$ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.0242ed943d02 no veth95521e6 复制代码
我们看到在interface中多了一个veth*的这样一个接口。通过ifconfig命令同样可以看到这个网络接口。
自定义 docker0
- 修改docker0默认分配的ip地址
sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0 复制代码
修改完后,重启docker服务 sudo service docker restart. 新运行的容器地址就变成了新的ip地址了。
- 添加虚拟网桥
sudo brctl addbr br0 sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0 复制代码
更改docker守护进程的启动配置:
vim /etc/default/docker 中添加 DOCKER_OPS的值 -b=br0. 复制代码
重启docker服务即可。
二、Docker 容器的互联
用于测试的Docker镜像 Dockerfile:
FROM ubuntu:14.04 RUN apt-get install -y ping RUN apt-get update RUN apt-get install -y nginx RUN apt-get install -y curl EXPOSE 80 CMD /bin/bash 复制代码
1. 允许所有容器互联
在同一宿主机下,docker的容器是通过虚拟网桥来进行连接的。那么在默认情况下,在同一宿主机中运行的容器都是可以互相连接的。
--icc=true 默认
容器的ip地址实际上是一个不可靠的连接,因为它会随着容器的启动而改变。
docker run --link=容器名:别名 复制代码
查看在容器中产生的哪些影响
$ env
查看环境变量,可以看到大量以WEBTEST*开头的环境变量,这些环境变量是在容器启动时,由docker添加的。我们还可以查看在/ect/host文件,这里添加了webtest的地址映射。当docker重启启动容器时 /ect/host所对应的ip地址发生了变化。也就是说, 针对于指定了link选项的容器,在启动时docker会自动修改ip地址和我们指定的别名之间的映射 。环境变量也会做出相应的改变。
2. 拒绝所有容器间互联
Docker守护进程的启动选项
--icc=false
修改vim /etc/default/docker,在末尾添加配置 DOCKER_OPTS="--icc=false"。 复制代码
需要重启docker的服务 sudo service docker restart.即使是link也ping不通。
3. 允许特定容器间的连接
Docker守护进程的启动选项
--icc=false --iptables=true
--link 在容器启动时添加link
docker利用iptables中的机制,在icc=false时,阻断所有的docker容器间的访问,仅仅运行利用link选项配置的容器进行相互的访问。
注: 如果出现ping不通的情况,可能为iptables的问题(DROP规则在docker之前了)。
sudo iptables -L -n 查看iptables规则的情况 sudo iptables -F 清空iptables规则设置 sudo service docker restart 重新启用docker的服务 sudo iptables -L -n 再来查看iptables的设置,docker的规则链已经在第一位 复制代码
重新启动容器即可。
欢迎扫码或微信搜索公众号《程序员果果》关注我,关注有惊喜~
以上所述就是小编给大家介绍的《Docker 容器的网络连接》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Docker入门实战-SSH连接Docker容器
- Docker容器端口映射后突然无法连接的问题排查
- 「docker实战篇」python的docker-创建appium容器以及设置appium容器连接安卓模拟器(31)
- tcp 长连接与短连接
- 没有 HTTP 连接池,空谈什么持久连接
- Linux中软连接和硬连接的区别
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Perl语言编程
[美] Larry Wall、Tom Christiansen、Jon Orwant / 何伟平 / 中国电力出版社 / 2001-12 / 129.00元
这不仅仅是一本关于Perl的书籍,更是一本独一无二的开发者自己介绍该语言及其文化的书籍。Larry Wall是Perl的开发者,他就这种语言的未来发展方向提出了自己的看法。Tom Christiansen是最早的几个拥护者之一,也是少数几个在错综复杂的中游刃有余的人之一。Jon Orwant是《Perl Journal》的主编,该杂志把Perl社区组合成了一个共同的论坛,以进行Perl新的开发。一起来看看 《Perl语言编程》 这本书的介绍吧!