Skip to content

Docker 网络模式

Docker 提供了多种网络模式,满足不同的网络需求。

网络驱动

bridge(默认)

bridge 是默认网络模式,适用于单机环境。

特点:

  • 容器通过虚拟网桥通信
  • 容器间可以相互通信
  • 需要端口映射才能从主机访问
sh
# 创建 bridge 网络
docker network create my-bridge

# 运行容器并连接到网络
docker run -d --network my-bridge --name app1 nginx
docker run -d --network my-bridge --name app2 nginx

host

host 模式直接使用主机网络。

特点:

  • 容器直接使用主机网络栈
  • 性能最好
  • 端口不需要映射
  • 仅 Linux 支持
sh
docker run -d --network host nginx

overlay

overlay 网络用于 Docker Swarm 集群。

特点:

  • 跨主机容器通信
  • 自动服务发现
  • 加密通信

macvlan

macvlan 允许容器直接使用物理网络。

特点:

  • 容器获得独立 MAC 地址
  • 直接访问物理网络
  • 需要物理网络支持

none

none 模式禁用网络。

sh
docker run -d --network none alpine

端口映射

将容器端口映射到主机端口:

sh
# 映射单个端口
docker run -d -p 8080:80 nginx

# 映射多个端口
docker run -d -p 8080:80 -p 8443:443 nginx

# 指定主机 IP
docker run -d -p 127.0.0.1:8080:80 nginx

网络配置

查看网络

sh
# 列出所有网络
docker network ls

# 查看网络详情
docker network inspect bridge

连接容器到网络

sh
# 运行容器时连接
docker run -d --network my-network nginx

# 连接已运行的容器
docker network connect my-network container-name

断开容器网络

sh
docker network disconnect my-network container-name

Docker Compose 网络

yaml
version: '3.8'

services:
  web:
    image: nginx
    networks:
      - frontend

  api:
    image: node:18
    networks:
      - frontend
      - backend

  db:
    image: postgres:15
    networks:
      - backend

networks:
  frontend:
  backend:

DNS 解析

Docker 内置 DNS 服务器,容器可以通过服务名相互访问。

yaml
services:
  web:
    image: nginx
  api:
    image: node:18
    # web 容器可以通过 "api" 主机名访问 api 容器

由 BSFC Tech 提供技术支持