技术教程 · 2026年5月18日 · VirtLab

Docker 网络配置详解:容器间通信与网络模式

深入解析 Docker 的四种网络模式、容器间通信机制,以及如何配置自定义网络,帮助您更好地管理容器化应用的网络架构。

Docker 容器网络架构

Docker 网络配置详解

Docker 作为现代云原生应用的核心技术,其网络配置是每个开发者和管理员必须掌握的知识。本文将深入解析 Docker 的网络机制。

Docker 网络基础

Docker 网络架构

Docker 使用独立的网络驱动模型,为容器提供灵活的网络通信能力。理解这些网络模式,有助于我们设计高效的容器架构。

四种网络模式详解

1. Bridge 模式(默认)

这是 Docker 的默认网络模式。当容器启动时未指定网络,将自动连接到 bridge 网络。

特点:

  • 容器获得独立的网络命名空间
  • 通过 veth pair 连接到 Docker 桥接器
  • 容器之间可以通过 IP 地址互相通信
  • 需通过端口映射访问容器服务

适用场景: 单机部署、独立运行的容器

2. Host 模式

容器共享宿主机的网络命名空间,直接使用宿主机的网络栈。

特点:

  • 性能最佳,无网络转发开销
  • 容器端口与宿主机端口直接冲突
  • 网络隔离性较差

适用场景: 高性能需求、对端口无冲突的服务

3. Container 模式

新容器共享另一个容器的网络命名空间。

特点:

  • 网络性能最优
  • 容器间网络完全隔离
  • 被共享的容器必须存在

适用场景: 容器间的紧密协作,如 sidecar 模式

4. None 模式

容器拥有独立的网络命名空间,但不配置任何网络接口。

特点:

  • 完全封闭的网络环境
  • 适合需要自定义网络的场景

适用场景: 离线计算、安全敏感环境

查看和管理网络

查看所有网络

docker network ls

查看网络详情

docker network inspect bridge

创建自定义网络

docker network create --driver bridge my-network

连接容器到网络

docker run -dit --name app1 --network my-network nginx
docker network connect my-network app2

容器间通信

通过 IP 地址通信

# 查看容器 IP
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name

通过容器名称通信

在同一网络中,容器可以通过名称互相访问,Docker 内置 DNS 会自动解析。

# 在 my-network 中,app1 可以直接访问 app2
ping app2

跨网络通信

不同网络的容器需要通过路由或网关进行通信。

Docker Compose 网络配置

version: '3.8'
services:
  web:
    image: nginx
    networks:
      - frontend
      - backend
  db:
    image: mysql
    networks:
      - backend

networks:
  frontend:
  backend:

实战案例:多服务应用部署

场景描述

部署一个 Nginx + Node.js + Redis 的三层架构应用。

网络规划

  1. frontend 网络:Nginx 反向代理
  2. backend 网络:Node.js 应用 + Redis 缓存
  3. Nginx 可访问 Node.js,Node.js 可访问 Redis

实现步骤

# 创建网络
docker network create frontend
docker network create backend

# 启动 Redis
docker run -d --name redis --network backend redis:alpine

# 启动 Node.js 应用
docker run -d --name api --network backend \
  -e REDIS_HOST=redis \
  node-app

# 启动 Nginx
docker run -d --name nginx --network frontend \
  -p 80:80 \
  nginx

常见问题与解决方案

容器无法访问外网

检查 iptables 规则或禁用 Docker 网络的 IPV6:

# 重启 Docker 服务
sudo systemctl restart docker

端口冲突

确保宿主机端口未被占用,或更改容器端口映射。

DNS 解析失败

使用 --dns 参数自定义 DNS 服务器:

docker run --dns 8.8.8.8 nginx

总结

掌握 Docker 网络配置是容器化部署的基础。建议从默认的 bridge 模式开始,逐步了解自定义网络和 Compose 网络配置,以应对更复杂的生产环境需求。

#Docker #容器网络 #网络配置 #Docker Compose #DevOps