Docker Compose 网络类型详解

bridge网络
默认网络类型,容器通过虚拟网桥连接到宿主机网络。每个容器分配独立IP,容器间可通过服务名通信。适用于单机多容器互联场景。

host网络
容器直接使用宿主机的网络命名空间,共享IP和端口。性能最佳但端口冲突风险高,适合需要低延迟的场景。

none网络
容器不配置任何网络,仅保留回环接口。适用于完全隔离环境或自定义网络配置的场景。

overlay网络
支持跨主机容器通信的网络类型,适用于Swarm集群环境。通过加密通道实现不同物理机上的容器互联。

macvlan网络
为容器分配真实MAC地址,使其直接连接到物理网络。容器像独立物理设备一样出现在局域网中。


宿主机与容器互联方法

端口映射
在docker-compose.yml中通过ports字段实现:

services:
  app:
    ports:
      - "8080:80"  # 宿主机8080映射到容器80端口

共享网络模式
使用network_mode: host让容器共享宿主机网络栈,无需端口映射即可通过localhost访问。

自定义网络通信
创建自定义bridge网络并指定固定IP:

networks:
  mynet:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24

services:
  app:
    networks:
      mynet:
        ipv4_address: 172.20.0.10

Windows宿主机与容器互通配置

防火墙规则配置
在Windows Defender防火墙中允许Docker相关入站规则:

  1. 控制面板→系统和安全→Windows Defender防火墙
  2. 允许应用通过防火墙→勾选所有Docker相关条目

网络适配器绑定
在Docker Desktop设置中:

  1. 进入Settings→Resources→Network
  2. 将Docker子网绑定到特定物理网卡(如Ethernet)

主机模式网络
对于需要直接暴露的服务,使用network_mode: host并在Windows防火墙开放对应端口。

特殊IP配置
Windows宿主机访问容器需使用Docker分配的虚拟IP(通常172.17.0.0/16)。可通过以下命令查看容器IP:

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名

跨主机通信
若需与其他Windows主机互通:

services:
  app:
    ports:
      - "0.0.0.0:3306:3306"  # 暴露到所有网络接口
networks:
  default:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.32.0/24
          gateway: 192.168.32.1

更多推荐