# 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实现跨主机的容器间互联


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET 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?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
