> For the complete documentation index, see [llms.txt](https://lzcloudsecurity.gitbook.io/yun-an-quan-gong-fang-ru-men/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lzcloudsecurity.gitbook.io/yun-an-quan-gong-fang-ru-men/di-liu-zhang-yun-yuan-sheng-gong-fang/docker-ji-chu-ru-men/docker-wang-luo-guan-li.md).

# Docker网络管理

**容器间的通信**

* &#x20;默认情况下
  * 同宿主机不同容器可相互通信
  * 不同宿主机之间容器IP地址相同重复，不能相互通信；

```bash
#同主机不同容器禁止访问设置
vim /lib/systemd/system/docker.service
ExecStart选项中加入
--icc=false
```

**容器名称互联**

```bash
docker run --name <容器名称> #指定容器的名称
docker run --link <目标通信的容器ID或者名称> #创建新容器时引用上面容器的名称
```

```bash
#Example
## Server1
docker run -it --name A_Server alpine:3.11 sh
 
## Server2
docker run -it --name B_Server --link A_Server alpine:3.11 sh
/ # cat /etc/hosts
172.17.0.2      server1 5c299948c052
172.17.0.3      1c045c904669
 
## 创建容器别名
docker run -it --name server3 --link server2:server2-alias alpine:3.11
 
#多个别名
docker run -it --name server3 --link server2:"server2-alias1 server2-alia2" alpine:3.11
```

**网络连接模式**

Docker支持5种模式

* &#x20;none
* &#x20;brige
* &#x20;host
* &#x20;container
* &#x20;network-name

```bash
#查看默认网络配置
docker network ls
 
#指定模式
docker run --network <mode>
docker run --net=<mode>
```

**bridge网络模式**

此模式创建的容器为每一个容器分配自己的网络IP等信息，并将容器连接到一个虚拟网桥与外界通信

需要宿主机启动ip\_forward功能

特点：

* &#x20;网络资源隔离:不同宿主机容器无法直接通信，各网络独立，但容器可以访问宿主机和其它主机等网络
* &#x20;无需手动配置
* &#x20;可访问外网：利用宿主机物理网卡，通过SNAT连接外网
* &#x20;性能较低
* &#x20;端口管理繁琐

```bash
#查看bridge信息
docker network inspect bridge
```

**Host网络模式**

此模式直接使用宿主机网卡和IP地址。

特点:

* &#x20;共享宿主机网络
* &#x20;网络性能无损耗
* &#x20;各容器网络无隔离
* &#x20;网络资源无法分别统计
* &#x20;端口管理困难
* &#x20;不支持端口映射

```bash
#使用host网络模式
docker run -d --network host --name web1 nginx-centos7-base:1.6.1
```

**none网络模式**

此模式容器不会进行任何网络配置，没有网卡、IP、路由，所以极少使用此模式。

特别：

* &#x20;默认无网络功能，无法和外部通信

**Container网络模式**

此模式是和已存在的容器共享一个网络，新创建的容器不会创建自己的网卡、IP，而是和被指定的容器共享IP和端口。

特点：

* &#x20;与宿主机网络空间隔离
* &#x20;容器间共享网络空间
* &#x20;适合频繁的容器间的网络通信
* &#x20;直接使用对方的网络

```bash
docker run -d --name server2 --network container:server1 nginx
```

**自定义网络模式**

使用自己定义的网段地址

```bash
docker network create -d bridge --subnet 172.12.0.0/16 --gateway 172.12.0.1 test-net
```

```bash
#利用自定义网络创建容器
docker run -it --network test-net alpine sh
```

**实现容器网络互通**

```bash
docker network connect TESTA TESTB
```

```bash
 #自定义网络连通默认网络（bridge）容器
docker network connect bridge TESTA
 
#断开
docker network disconnect bridge TESTA
```

* &#x20;利用Open vSwitch实现跨主机的容器间互联
* &#x20;Weave实现跨主机的容器间互联
