Docker 网络配置详解(从基础到实战)

在 Docker 中,网络是容器通信的核心能力之一。无论是 Web 服务、数据库还是微服务架构,都离不开网络配置。

本文将系统讲解 Docker 网络的类型、原理、常用命令以及实战配置方法,帮助你彻底理解容器网络通信机制。


一、Docker 网络是什么?

Docker 网络本质是:

容器之间、容器与宿主机之间的通信桥梁

默认情况下,每个容器都有独立网络命名空间。


二、Docker 默认网络类型

1️⃣ bridge(默认桥接网络)

这是最常用的模式。

特点:

  • 容器通过虚拟网桥通信
  • 可以访问外网
  • 容器之间需通过 IP 或名称通信

查看:

docker network ls

2️⃣ host(宿主机网络)

特点:

  • 容器共享宿主机网络
  • 无端口隔离
  • 性能最好,但隔离性差

运行方式:

docker run --network host nginx

3️⃣ none(无网络)

特点:

  • 完全断网
  • 用于安全或测试
docker run --network none alpine

4️⃣ overlay(集群网络)

用于:

  • Swarm
  • 多主机通信

5️⃣ macvlan(高级网络)

特点:

  • 容器直接拥有局域网 IP
  • 类似真实物理设备

三、Docker 网络结构原理

Docker 网络核心组件:

  • bridge(虚拟网桥)
  • veth pair(虚拟网卡对)
  • iptables(流量转发)
  • namespace(网络隔离)

简化理解:

容器A ---- veth ---- bridge ---- veth ---- 容器B

四、常用 Docker 网络命令

1. 查看网络

docker network ls

2. 查看网络详情

docker network inspect bridge

3. 创建网络

docker network create my-net

4. 删除网络

docker network rm my-net

5. 容器加入网络

docker network connect my-net container_name

五、容器之间通信方式


1️⃣ 通过 IP 通信

ping 172.17.0.2

缺点:IP 会变化 ❌


2️⃣ 通过容器名通信(推荐)

Docker 内置 DNS:

ping mysql

3️⃣ 自定义网络(最佳实践)

docker network create app-net

六、实战:Web + MySQL 网络通信


1. 创建网络

docker network create app-net

2. 启动 MySQL

docker run -d \
  --name mysql \
  --network app-net \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8.0

3. 启动 Web

docker run -d \
  --name web \
  --network app-net \
  nginx

4. 测试通信

进入 web:

docker exec -it web bash

测试:

ping mysql

✔ 成功说明网络互通


七、Docker Compose 网络(推荐)

在 Docker Compose 中,网络是自动创建的。


示例:

version: "3.9"

services:
  web:
    image: nginx
    ports:
      - "8080:80"

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root

特点:

  • 自动创建 bridge 网络
  • 服务名就是 DNS 名
  • 无需手动配置 IP

八、端口映射 vs 网络通信


1. 端口映射(对外访问)

-p 8080:80

作用:

外部访问容器


2. 网络通信(内部访问)

http://mysql:3306

作用:

容器之间通信


九、高级网络配置


1. 固定 IP(自定义 bridge)

docker network create \
  --subnet=172.18.0.0/16 \
  my-net

2. 指定 IP 运行容器

docker run -d \
  --net my-net \
  --ip 172.18.0.10 nginx

3. 限制容器网络

--network none

十、常见网络问题排查


1. 容器无法 ping 通

检查:

docker network inspect my-net

2. DNS 不生效

原因:

  • 不在同一 network

3. 端口无法访问

检查:

ss -tulnp

4. 外网无法访问容器

检查:

  • 防火墙
  • 端口映射
  • security group(云服务器)

十一、生产环境建议


✔ 1. 使用自定义网络

docker network create app-net

✔ 2. 避免使用默认 bridge

默认网络不适合复杂系统


✔ 3. 使用服务名访问

db:3306
redis:6379

✔ 4. 配合 Docker Compose

自动网络管理最优解


十二、总结

Docker 网络的核心就是三点:

  • bridge(默认通信)
  • DNS(容器名解析)
  • network(隔离与互通)

而 Docker Compose 则进一步简化了网络管理:

自动创建网络 + 自动 DNS + 服务互通


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部