温馨提示×

Linux中Docker网络怎么配置

小樊
34
2025-11-30 11:14:50
栏目: 智能运维

Linux 下 Docker 网络配置指南

一 核心概念与网络模式

  • Bridge(桥接):默认模式。Docker 在宿主机创建虚拟网桥 docker0(默认网段 172.17.0.0/16),容器接入该网桥并通过 NAT 访问外网;外部访问需做端口映射。适合单机多容器隔离通信。
  • Host(主机网络):容器与宿主机共享网络命名空间,直接使用宿主机 IP 和端口,无 NAT,性能更好,但网络隔离性降低。
  • None(无网络):仅保留 lo 回环接口,完全隔离,适合安全或自定义网络栈场景。
  • Container(共享网络命名空间):与指定容器共享网络栈,便于紧密耦合的容器间通信。
  • 自定义网络驱动:除原生外,常用有 bridge、macvlan、overlay(跨主机)。自定义 bridge 可预设 子网/网关,便于服务发现与隔离。

二 快速上手常用配置

  • 查看与创建网络
    • 查看网络:docker network ls;查看详情:docker network inspect bridge
    • 创建自定义 bridge:docker network create --driver bridge --subnet 172.19.0.0/16 --gateway 172.19.0.1 mybridge_net
  • 运行容器并指定网络
    • 使用自定义网络:docker run -d --name web --network mybridge_net nginx:alpine
    • 端口映射(外部访问容器)
      • 映射所有地址:docker run -d -p 80:80 nginx:alpine
      • 仅本机:docker run -d -p 127.0.0.1:80:80 nginx:alpine
      • 本机随机端口:docker run -d -p 127.0.0.1::80 nginx:alpine
      • 查看端口:docker port <容器名或ID>
  • 其他网络模式
    • Host 模式:docker run -d --network host nginx:alpine
    • None 模式:docker run -d --network none alpine:latest
    • Container 模式:docker run -d --network container:<NAME_OR_ID> busybox:latest

三 全局网络参数与 daemon.json

  • 编辑配置文件 /etc/docker/daemon.json(不存在则新建),常见参数:
    • 指定默认网桥 IP:"bip": "192.168.1.1/24"
    • 指定 MTU:"mtu": 1500
    • 自定义地址池:"default-address-pools": [{"base": "172.16.0.0/16", "size": 24}]
  • 使配置生效:sudo systemctl restart docker
  • 验证:docker network inspect bridge 查看网桥与子网是否符合预期。

四 跨主机与高级网络

  • Overlay 网络:用于 Swarm/多主机 容器通信,需启用 Swarm 并在 compose/service 中使用 driver: overlay 创建覆盖网络。
  • Macvlan 网络:为容器提供 L2 直连 到物理网络的能力,适合需要容器拥有独立 MAC/IP 的场景。示例:
    • 创建 macvlan 网络(示例父接口为 eth0,按实际环境替换)
      • docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macvlan_net
    • 运行容器:docker run --network macvlan_net --ip=192.168.1.100 -it alpine:latest
  • 提示:macvlan 与宿主机通信通常需要额外路由或 parent 接口辅助配置;Overlay 需集群环境支持。

五 常见问题与排查

  • 端口未生效或冲突:检查是否使用了正确的 -p 绑定地址与端口;查看映射:docker port <容器>;查看 NAT 规则:sudo iptables -t nat -vnL
  • 容器间不通:确认在同一网络(docker network connect mybridge_net <容器>),优先使用自定义网络的 DNS 自动解析 而非 IP。
  • 自定义网桥未生效:核对 daemon.json 语法并重启 Docker;用 docker network inspect 校验子网/网关。
  • 主机与 macvlan 容器通信异常:为宿主机添加指向 macvlan 子网的路由或使用 parent 辅助接口方案。
  • 需要更强隔离或特殊栈:选择 none/container/host 模式,或在 none 基础上按需添加 veth/网桥。

0