温馨提示×

Ubuntu Docker网络隔离怎样操作

小樊
49
2025-11-08 21:31:59
栏目: 智能运维

Ubuntu下Docker网络隔离操作指南

Docker通过网络命名空间、虚拟网桥等技术实现容器间及容器与外部的网络隔离,以下是具体操作方法及注意事项:

1. 选择隔离性强的网络模式

Docker提供多种网络模式,其中none模式(完全隔离)和bridge模式(基础隔离)是最常用的隔离方案:

  • none模式:容器无任何网络配置(无网卡、IP、路由),仅保留lo回环接口,适合需要绝对隔离的场景(如敏感数据处理)。
    命令示例:docker run -it --network none ubuntu /bin/bash
  • bridge模式(默认模式):容器连接至Docker虚拟网桥docker0,通过NAT实现与宿主机通信,但容器间默认隔离(需通过端口映射或自定义网络实现互通)。
    命令示例:docker run -it --network bridge ubuntu /bin/bash

2. 创建自定义桥接网络(推荐)

默认的bridge网络无法区分不同业务容器,自定义桥接网络可实现细粒度的容器隔离与互通:

  • 创建自定义网络:通过docker network create命令创建,可指定子网、网关等参数(避免IP冲突)。
    命令示例:docker network create --subnet=192.168.1.0/24 --gateway=192.168.1.1 my_isolated_net
  • 连接容器至自定义网络:启动容器时通过--network参数指定自定义网络,容器间可通过容器名直接通信(无需端口映射)。
    命令示例:docker run -d --network my_isolated_net --name container1 nginx
    docker run -d --network my_isolated_net --name container2 redis
  • 验证网络隔离:通过docker network inspect my_isolated_net查看网络中的容器列表,不同自定义网络的容器无法直接通信。

3. 配置容器间访问控制(iptables)

若需进一步限制容器间的通信(如仅允许特定容器访问),可通过iptables设置规则:

  • 查看自定义网络的IP段:通过docker network inspect my_isolated_net获取子网(如192.168.1.0/24)。
  • 添加iptables规则:禁止非目标容器访问特定端口(如仅允许container1访问container26379端口)。
    命令示例:
    # 允许container1(IP:192.168.1.2)访问container2(IP:192.168.1.3)的6379端口
    iptables -A DOCKER-USER -s 192.168.1.2 -d 192.168.1.3 -p tcp --dport 6379 -j ACCEPT
    # 拒绝其他所有到container2 6379端口的访问
    iptables -A DOCKER-USER -d 192.168.1.3 -p tcp --dport 6379 -j DROP
    
    注意:DOCKER-USER链是Docker专门用于用户自定义规则的链,优先级高于默认规则。

4. 禁用容器对外网络访问

若需让容器仅与特定容器通信(如内部服务),可禁用其对外网络访问:

  • 方法1:修改容器网络模式为none:容器无网络配置,仅能通过lo接口通信(适合纯计算任务)。
    命令示例:docker run -it --network none ubuntu /bin/bash
  • 方法2:通过iptables限制出口流量:禁止容器访问外部网络(如互联网),但允许接收宿主机或其他容器的流量。
    命令示例:iptables -A OUTPUT -o eth0 -j DROPeth0为宿主机网卡,需替换为实际名称)。

5. 使用Docker Compose管理复杂隔离

对于多容器应用(如Web+DB),可通过docker-compose.yml文件定义自定义网络,简化配置:

version: '3'
services:
  web:
    image: nginx
    networks:
      - frontend
  db:
    image: mysql
    networks:
      - backend
networks:
  frontend:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.1.0/24
          gateway: 192.168.1.1
  backend:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.2.0/24
          gateway: 192.168.2.1

运行docker-compose up -d后,web192.168.1.x)与db192.168.2.x)容器处于不同网络,需通过宿主机或中间件(如Redis)实现通信。

注意事项

  • 自定义网络需手动管理IP段,避免与宿主机或其他网络冲突;
  • iptables规则重启后会丢失,需通过iptables-save保存(Ubuntu可使用netfilter-persistent工具);
  • 隔离性越强(如none模式),容器的可用性越低,需根据业务需求选择合适模式。

0