docker容器的网络四种通信模式的总图如下
Closed container: 封闭式容器,只有lo接口,不参与网络通信,运行与此类容器中的进程仅能访问本地环回接口,仅适用于进程无须网络通信的场景中,例如备份、进程诊断及各种离线任务等。命令行:docker run --rm --net none busybox:latest
Bridged container:nat桥接式容器,通过容器接口连接到docker0上,默认172.17.0.0/16,在使用 docker 时,没有指定网络模式时被采用的默认的网络模式。桥接式容器一般拥有两个接口:一个环回接口和一个连接至主机上某桥设备的以太网接口。docker daemon启动时,默认会创建一个名为docker0的网桥,并且创建的容器为桥接式容器,其以太网接口桥接至docker0。docker0桥为SNAT桥,因此,桥接式容器可通过此桥接口访问外部网络,但是防火墙则阻止一切从外部网络访问桥接式容器的请求。
docker run --rm --net bridge busybox:latest
如果容器上的服务要被外部网络访问,需要在宿主机上为其定义DNAT规则,通过使用docker run 命令的-p 参数-P来实现dnat的端口映射,无须手动的添加规则
docker run --name b1 --rm -d -p 80:80 hukey/httpd:v0.2
Joined container:联盟式容器,让两个容器有一分部名称空间是隔离的:文件系统、用户、PID隔离,但是 UTS、NET和IPC是同享同一组,所以两个容器使用同一组网络设备,可通过lo通信。
[root@kubemaster cw_docker]# docker run -it --name test2 cwcentos:1 /bin/sh sh-4.4# cd /etc/hosts sh: cd: /etc/hosts: Not a directory sh-4.4# vi /etc/hosts sh-4.4# vi /etc/re redhat-release resolv.conf sh-4.4# vi /etc/re redhat-release resolv.conf sh-4.4# vi /etc/resolv.conf sh-4.4# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 104: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever sh-4.4# [root@kubemaster ~]# docker run -it --net container:test2(container:容器的名字) --name=test4 cwcentos:1 /bin/bash [root@db9fe42ebfd8 /]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 104: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever [root@db9fe42ebfd8 /]#
Open container:开放式容器,开放的网卡是物理网络接口,和物理机同享同一组网络命名空间