mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 04:14:38 +00:00
Add advanced networking
This commit is contained in:
709
09_network/9.7_advanced_networking.md
Normal file
709
09_network/9.7_advanced_networking.md
Normal file
@@ -0,0 +1,709 @@
|
||||
## 9.7 容器网络高级特性
|
||||
|
||||
深入探讨容器网络的核心机制、Overlay 网络、CNI 插件生态、容器 DNS 解析、网络策略等高级特性,为生产级别的网络架构打下坚实基础。
|
||||
|
||||
### 9.7.1 Overlay 网络原理与配置
|
||||
|
||||
Overlay 网络在现有网络基础上建立虚拟网络,允许容器跨宿主机通信。它是 Kubernetes 和 Swarm 模式的基础。
|
||||
|
||||
#### Overlay 网络工作原理
|
||||
|
||||
Overlay 网络通过隧道封装技术(通常是 VXLAN)将容器网络流量封装在宿主机物理网络的 UDP 数据包中传输。
|
||||
|
||||
```
|
||||
容器 A (192.168.0.2)
|
||||
↓
|
||||
veth 对
|
||||
↓
|
||||
br-net (网桥)
|
||||
↓
|
||||
Docker 引擎 (VXLAN 封装)
|
||||
↓
|
||||
物理网络 (172.16.0.0/24)
|
||||
↓
|
||||
Docker 引擎 (VXLAN 解封装)
|
||||
↓
|
||||
br-net (网桥)
|
||||
↓
|
||||
veth 对
|
||||
↓
|
||||
容器 B (192.168.0.3,不同宿主机)
|
||||
```
|
||||
|
||||
#### 创建和使用 Overlay 网络
|
||||
|
||||
**Docker Swarm 模式下的 Overlay 网络:**
|
||||
|
||||
```bash
|
||||
# 初始化 Swarm(创建集群)
|
||||
docker swarm init
|
||||
|
||||
# 创建 overlay 网络
|
||||
docker network create --driver overlay \
|
||||
--subnet 192.168.0.0/24 \
|
||||
--opt com.docker.network.driver.mtu=1450 \
|
||||
my-overlay-net
|
||||
|
||||
# 验证网络创建
|
||||
docker network ls
|
||||
docker network inspect my-overlay-net
|
||||
|
||||
# 在 Swarm 服务中使用 overlay 网络
|
||||
docker service create --name web \
|
||||
--network my-overlay-net \
|
||||
--replicas 3 \
|
||||
nginx:latest
|
||||
|
||||
# 验证服务跨节点通信
|
||||
docker service ps web
|
||||
```
|
||||
|
||||
**单机 Overlay 网络模拟(Linux 容器):**
|
||||
|
||||
```bash
|
||||
# 创建自定义 overlay 网络
|
||||
docker network create --driver overlay custom-overlay
|
||||
|
||||
# 创建两个容器
|
||||
docker run -d --name container1 --network custom-overlay nginx:latest
|
||||
docker run -d --name container2 --network custom-overlay nginx:latest
|
||||
|
||||
# 测试跨容器通信
|
||||
docker exec container1 ping container2
|
||||
docker exec container1 curl http://container2
|
||||
|
||||
# 检查网络配置
|
||||
docker network inspect custom-overlay
|
||||
```
|
||||
|
||||
#### Overlay 网络性能优化
|
||||
|
||||
```bash
|
||||
# 调整 MTU(Maximum Transmission Unit)避免分片
|
||||
# VXLAN 开销 50 字节,物理 MTU 1500,建议设置为 1450
|
||||
docker network create --driver overlay \
|
||||
--opt com.docker.network.driver.mtu=1450 \
|
||||
optimized-overlay
|
||||
|
||||
# 启用 IP 地址管理(IPAM)自定义
|
||||
docker network create --driver overlay \
|
||||
--subnet 10.0.9.0/24 \
|
||||
--aux-address "my-router=10.0.9.2" \
|
||||
my-custom-overlay
|
||||
|
||||
# 在 Compose 中使用 overlay 网络
|
||||
version: '3.9'
|
||||
services:
|
||||
web:
|
||||
image: nginx
|
||||
networks:
|
||||
- backend
|
||||
|
||||
db:
|
||||
image: postgres
|
||||
networks:
|
||||
- backend
|
||||
|
||||
networks:
|
||||
backend:
|
||||
driver: overlay
|
||||
driver_opts:
|
||||
com.docker.network.driver.mtu: 1450
|
||||
```
|
||||
|
||||
### 9.7.2 CNI 插件生态概览
|
||||
|
||||
容器网络接口(CNI)是容器编排平台(尤其是 Kubernetes)的标准化网络接口。不同的 CNI 插件提供不同的网络能力。
|
||||
|
||||
#### 主流 CNI 插件对比
|
||||
|
||||
**Calico - 基于 BGP 的网络**
|
||||
|
||||
Calico 使用 BGP 协议进行路由,支持网络策略和 eBPF 加速。
|
||||
|
||||
```yaml
|
||||
# Kubernetes 中安装 Calico
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: calico-config
|
||||
namespace: kube-system
|
||||
data:
|
||||
cni_network_config: |
|
||||
{
|
||||
"name": "k8s-pod-network",
|
||||
"cniVersion": "0.4.0",
|
||||
"plugins": [
|
||||
{
|
||||
"type": "calico",
|
||||
"datastore_type": "kubernetes",
|
||||
"mtu": 1450,
|
||||
"ipam": {
|
||||
"type": "calico-ipam"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "portmap",
|
||||
"snat": true,
|
||||
"capabilities": {"portMappings": true}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**Flannel - 简单可靠的 Overlay**
|
||||
|
||||
Flannel 提供简单的 overlay 网络实现,适合小到中等规模的集群。
|
||||
|
||||
```bash
|
||||
# 安装 Flannel
|
||||
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
|
||||
|
||||
# 配置 Flannel 后端(VXLAN、UDP、AWS VPC 等)
|
||||
cat <<EOF | kubectl apply -f -
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: kube-flannel-cfg
|
||||
namespace: kube-flannel
|
||||
data:
|
||||
cni-conf.json: |
|
||||
{
|
||||
"name": "cbr0",
|
||||
"cniVersion": "0.3.1",
|
||||
"plugins": [
|
||||
{
|
||||
"type": "flannel",
|
||||
"delegate": {
|
||||
"hairpinMode": true,
|
||||
"isDefaultGateway": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "portmap",
|
||||
"capabilities": {
|
||||
"portMappings": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
net-conf.json: |
|
||||
{
|
||||
"Network": "10.244.0.0/16",
|
||||
"Backend": {
|
||||
"Type": "vxlan"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
**Cilium - eBPF 驱动的先进网络**
|
||||
|
||||
Cilium 使用 eBPF 在内核级别实现网络策略和可观测性,性能优异。
|
||||
|
||||
```bash
|
||||
# 安装 Cilium
|
||||
helm repo add cilium https://helm.cilium.io
|
||||
helm install cilium cilium/cilium \
|
||||
--namespace kube-system \
|
||||
--set image.tag=v1.14.0 \
|
||||
--set operator.replicas=1
|
||||
|
||||
# 启用 Hubble(可观测性)
|
||||
helm upgrade cilium cilium/cilium \
|
||||
--namespace kube-system \
|
||||
--reuse-values \
|
||||
--set hubble.enabled=true \
|
||||
--set hubble.ui.enabled=true
|
||||
```
|
||||
|
||||
**Weave - 跨主机网络通信**
|
||||
|
||||
Weave 提供简单的跨主机通信,支持加密和多播。
|
||||
|
||||
```bash
|
||||
# Docker 中使用 Weave 网络
|
||||
docker run -d --name weave \
|
||||
--net=host \
|
||||
--cap-add=NET_ADMIN \
|
||||
--cap-add=SYS_PTRACE \
|
||||
ghcr.io/weaveworks/weave:latest
|
||||
|
||||
# 连接到 Weave 网络
|
||||
docker run -d --network weave --name web nginx:latest
|
||||
```
|
||||
|
||||
**CNI 插件对比表:**
|
||||
|
||||
| 特性 | Calico | Flannel | Cilium | Weave |
|
||||
|------|--------|---------|--------|-------|
|
||||
| 路由方式 | BGP | VXLAN/UDP | eBPF | VxLAN |
|
||||
| 网络策略 | ✓ | ✗ | ✓ (L3-L7) | ✗ |
|
||||
| 性能 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
|
||||
| 可观测性 | 中 | 低 | ⭐⭐⭐⭐⭐ | 中 |
|
||||
| 学习曲线 | 中 | 低 | 高 | 低 |
|
||||
| 生产就绪 | ✓ | ✓ | ✓ | ✓ |
|
||||
|
||||
### 9.7.3 容器 DNS 解析机制
|
||||
|
||||
Docker 内置 DNS 服务器,但 DNS 解析涉及多个层面的配置。
|
||||
|
||||
#### DNS 解析流程
|
||||
|
||||
```
|
||||
容器应用 (dig www.example.com)
|
||||
↓
|
||||
容器内 /etc/resolv.conf (127.0.0.11:53)
|
||||
↓
|
||||
Docker 内嵌 DNS 服务器 (127.0.0.11)
|
||||
↓
|
||||
用户自定义 DNS 或宿主机 /etc/resolv.conf
|
||||
↓
|
||||
外部 DNS 服务器 (8.8.8.8 等)
|
||||
↓
|
||||
DNS 响应 → 容器缓存 → 应用
|
||||
```
|
||||
|
||||
#### 配置容器 DNS
|
||||
|
||||
**在运行时指定 DNS:**
|
||||
|
||||
```bash
|
||||
# 单个容器
|
||||
docker run -d \
|
||||
--dns 8.8.8.8 \
|
||||
--dns 1.1.1.1 \
|
||||
--dns-search example.com \
|
||||
nginx:latest
|
||||
|
||||
# DNS 选项
|
||||
docker run -d \
|
||||
--dns-option ndots:2 \
|
||||
--dns-option timeout:1 \
|
||||
--dns-option attempts:3 \
|
||||
nginx:latest
|
||||
|
||||
# 查看容器 DNS 配置
|
||||
docker exec <container_id> cat /etc/resolv.conf
|
||||
```
|
||||
|
||||
**Docker Compose DNS 配置:**
|
||||
|
||||
```yaml
|
||||
version: '3.9'
|
||||
|
||||
services:
|
||||
web:
|
||||
image: nginx
|
||||
dns:
|
||||
- 8.8.8.8
|
||||
- 1.1.1.1
|
||||
dns_search:
|
||||
- example.com
|
||||
- local
|
||||
|
||||
db:
|
||||
image: postgres
|
||||
networks:
|
||||
- backend
|
||||
hostname: postgres-db
|
||||
|
||||
networks:
|
||||
backend:
|
||||
driver: bridge
|
||||
|
||||
# 容器内 /etc/resolv.conf 将被自动配置
|
||||
# search example.com local
|
||||
# nameserver 8.8.8.8
|
||||
# nameserver 1.1.1.1
|
||||
```
|
||||
|
||||
**Docker 守护进程级别配置:**
|
||||
|
||||
```json
|
||||
{
|
||||
"dns": ["8.8.8.8", "1.1.1.1"],
|
||||
"dns-search": ["example.com"],
|
||||
"insecure-registries": [],
|
||||
"registry-mirrors": ["https://mirror.example.com"]
|
||||
}
|
||||
```
|
||||
|
||||
#### 自定义服务发现(Service Discovery)
|
||||
|
||||
**使用 Docker 内建 DNS 的服务发现:**
|
||||
|
||||
```bash
|
||||
# 创建自定义网络
|
||||
docker network create mynet
|
||||
|
||||
# 运行服务
|
||||
docker run -d --name web --network mynet nginx:latest
|
||||
docker run -d --name db --network mynet postgres:latest
|
||||
|
||||
# 在其他容器中通过服务名访问
|
||||
docker run -it --network mynet busybox sh
|
||||
# ping web # 自动解析到 web 容器 IP
|
||||
# ping db # 自动解析到 db 容器 IP
|
||||
```
|
||||
|
||||
**Compose 服务名自动发现:**
|
||||
|
||||
```yaml
|
||||
version: '3.9'
|
||||
|
||||
services:
|
||||
frontend:
|
||||
image: nginx
|
||||
depends_on:
|
||||
- backend
|
||||
environment:
|
||||
BACKEND_URL: http://backend:8080
|
||||
|
||||
backend:
|
||||
image: myapp
|
||||
depends_on:
|
||||
- database
|
||||
|
||||
database:
|
||||
image: postgres
|
||||
environment:
|
||||
POSTGRES_DB: mydb
|
||||
|
||||
# frontend 容器可以直接访问 http://backend:8080
|
||||
# backend 容器可以直接访问 postgres://database:5432
|
||||
```
|
||||
|
||||
#### DNS 性能优化
|
||||
|
||||
```bash
|
||||
# 检查 DNS 延迟
|
||||
time docker exec <container> nslookup www.example.com
|
||||
|
||||
# 优化 DNS 解析
|
||||
docker run -d \
|
||||
--dns 127.0.0.1 \ # 使用本地缓存 DNS (Dnsmasq)
|
||||
nginx:latest
|
||||
|
||||
# 在 Kubernetes 中优化
|
||||
kubectl patch deployment -n kube-system coredns --patch '{
|
||||
"spec": {
|
||||
"template": {
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "coredns",
|
||||
"resources": {
|
||||
"limits": {
|
||||
"memory": "512Mi",
|
||||
"cpu": "500m"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
### 9.7.4 网络策略(NetworkPolicy)实践
|
||||
|
||||
网络策略定义了容器间的流量控制规则,是微服务架构中的安全基础。
|
||||
|
||||
#### 基本网络策略
|
||||
|
||||
**默认拒绝所有入站流量的策略:**
|
||||
|
||||
```yaml
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: default-deny-ingress
|
||||
namespace: default
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Ingress
|
||||
# 不指定 ingress 规则,表示拒绝所有入站流量
|
||||
```
|
||||
|
||||
**允许特定来源的入站流量:**
|
||||
|
||||
```yaml
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-from-frontend
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
tier: backend
|
||||
policyTypes:
|
||||
- Ingress
|
||||
ingress:
|
||||
- from:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
tier: frontend
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 8080
|
||||
```
|
||||
|
||||
**允许出站流量到数据库:**
|
||||
|
||||
```yaml
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-backend-to-db
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
tier: backend
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
# 允许到数据库的流量
|
||||
- to:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
tier: database
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 5432
|
||||
# 允许 DNS 查询
|
||||
- to:
|
||||
- namespaceSelector: {}
|
||||
ports:
|
||||
- protocol: UDP
|
||||
port: 53
|
||||
# 允许到外部 API 的流量
|
||||
- to:
|
||||
- ipBlock:
|
||||
cidr: 0.0.0.0/0
|
||||
except:
|
||||
- 169.254.169.254/32 # 阻止元数据服务
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 443
|
||||
```
|
||||
|
||||
#### 微服务网络策略示例
|
||||
|
||||
```yaml
|
||||
---
|
||||
# 拒绝所有默认
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: default-deny-all
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
|
||||
---
|
||||
# Frontend 容器策略
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-frontend
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app: frontend
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
ingress:
|
||||
# 允许来自 Ingress Controller 的流量
|
||||
- from:
|
||||
- namespaceSelector:
|
||||
matchLabels:
|
||||
name: ingress-nginx
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app: ingress-controller
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 3000
|
||||
egress:
|
||||
# 允许到 API 的流量
|
||||
- to:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app: api
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 8080
|
||||
# 允许 DNS
|
||||
- to:
|
||||
- namespaceSelector: {}
|
||||
podSelector:
|
||||
matchLabels:
|
||||
k8s-app: kube-dns
|
||||
ports:
|
||||
- protocol: UDP
|
||||
port: 53
|
||||
|
||||
---
|
||||
# API 容器策略
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-api
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app: api
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
ingress:
|
||||
- from:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app: frontend
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 8080
|
||||
egress:
|
||||
# 允许到数据库的流量
|
||||
- to:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app: postgres
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 5432
|
||||
# 允许 DNS
|
||||
- to:
|
||||
- namespaceSelector: {}
|
||||
podSelector:
|
||||
matchLabels:
|
||||
k8s-app: kube-dns
|
||||
ports:
|
||||
- protocol: UDP
|
||||
port: 53
|
||||
|
||||
---
|
||||
# 数据库容器策略
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-postgres
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app: postgres
|
||||
policyTypes:
|
||||
- Ingress
|
||||
ingress:
|
||||
- from:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app: api
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 5432
|
||||
```
|
||||
|
||||
#### 使用 Calico/Cilium 的高级网络策略
|
||||
|
||||
**L7 应用层策略(仅 Cilium 支持):**
|
||||
|
||||
```yaml
|
||||
apiVersion: "cilium.io/v2"
|
||||
kind: CiliumNetworkPolicy
|
||||
metadata:
|
||||
name: "api-gateway-policy"
|
||||
spec:
|
||||
description: "L7 policy for API gateway"
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
app: api
|
||||
ingress:
|
||||
- fromEndpoints:
|
||||
- matchLabels:
|
||||
app: frontend
|
||||
toPorts:
|
||||
- ports:
|
||||
- port: "8080"
|
||||
protocol: TCP
|
||||
rules:
|
||||
http:
|
||||
# 允许 GET /api/users
|
||||
- method: "GET"
|
||||
path: "/api/users/.*"
|
||||
# 允许 POST /api/users 仅从管理员来源
|
||||
- method: "POST"
|
||||
path: "/api/users"
|
||||
sourceIPs:
|
||||
- "10.0.0.0/8"
|
||||
```
|
||||
|
||||
### 9.7.5 跨主机容器通信方案对比
|
||||
|
||||
#### 方案对比表
|
||||
|
||||
| 方案 | 隔离性 | 性能 | 复杂度 | 适用场景 |
|
||||
|------|--------|------|--------|---------|
|
||||
| 主机网络 | ✗ | ⭐⭐⭐⭐⭐ | 低 | 高性能,单主机 |
|
||||
| Bridge + Host Port | 中 | ⭐⭐⭐⭐ | 低 | 小规模集群 |
|
||||
| Overlay (VXLAN) | ✓ | ⭐⭐⭐ | 中 | 跨域通信 |
|
||||
| BGP (Calico) | ✓ | ⭐⭐⭐⭐ | 中 | 大规模集群 |
|
||||
| eBPF (Cilium) | ✓ | ⭐⭐⭐⭐⭐ | 高 | 高性能大集群 |
|
||||
|
||||
#### 选择建议
|
||||
|
||||
```bash
|
||||
# 1. 开发环境:使用 Bridge 网络
|
||||
docker network create my-app
|
||||
docker-compose up # 默认使用 bridge
|
||||
|
||||
# 2. 小规模生产(< 50 节点):使用 Flannel
|
||||
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
|
||||
|
||||
# 3. 中等规模(50-500 节点):使用 Calico
|
||||
kubeadm init --pod-network-cidr=192.168.0.0/16
|
||||
kubectl apply -f https://docs.projectcalico.org/v3.24/manifests/tigera-operator.yaml
|
||||
|
||||
# 4. 大规模(> 500 节点)或需要 L7 策略:使用 Cilium
|
||||
helm install cilium cilium/cilium --namespace kube-system
|
||||
|
||||
# 5. 需要多云/跨域:使用 Weave
|
||||
```
|
||||
|
||||
### 9.7.6 网络故障排查
|
||||
|
||||
**常见网络问题诊断:**
|
||||
|
||||
```bash
|
||||
# 1. 容器无法访问外部网络
|
||||
docker exec <container> ping 8.8.8.8
|
||||
docker exec <container> cat /etc/resolv.conf
|
||||
docker logs <container> | grep -i network
|
||||
|
||||
# 2. 容器间无法通信
|
||||
docker network inspect <network>
|
||||
docker exec <container1> ping <container2>
|
||||
|
||||
# 3. 端口映射失效
|
||||
docker port <container>
|
||||
netstat -tlnp | grep <port>
|
||||
|
||||
# 4. DNS 解析失败
|
||||
docker exec <container> nslookup example.com
|
||||
docker exec <container> cat /etc/hosts
|
||||
|
||||
# 5. 网络延迟
|
||||
docker run --rm --network host iperf3:latest -c <target>
|
||||
docker exec <container> mtr -r example.com
|
||||
|
||||
# 使用 tcpdump 抓包分析
|
||||
docker run --rm --cap-add NET_ADMIN --network host \
|
||||
corfr/tcpdump -i eth0 -n "port 80"
|
||||
```
|
||||
@@ -39,3 +39,4 @@ graph TD
|
||||
* [容器互联](9.4_container_linking.md)
|
||||
* [外部访问容器](9.5_port_mapping.md)
|
||||
* [网络隔离](9.6_network_isolation.md)
|
||||
* [高级网络配置](9.7_advanced_networking.md)
|
||||
|
||||
Reference in New Issue
Block a user