温馨提示×

Linux Docker网络配置指南

小樊
34
2025-12-10 07:22:43
栏目: 智能运维

一 核心概念与网络模式

  • bridge:安装 Docker 后自动创建 docker0 虚拟网桥,默认网段为 172.17.0.1/16。容器接入该网桥,获得私有 IP,容器间可二层互通;对外部网络默认不可见,需通过 NAT/端口映射 访问外网或被访问。适合单机多容器隔离通信。
  • host:使用 –network=host 共享宿主机网络命名空间,直接使用宿主机 IP 和端口,无 NAT,网络性能更好,但端口与隔离性受限。适合对网络性能敏感、端口充足的场景。
  • none:使用 –network=none 仅保留 lo 回环接口,完全禁用网络,适合批处理/离线任务的安全隔离。
  • container:使用 –network=container:<NAME|ID> 与指定容器共享网络命名空间,适合“边车”模式、协同进程等需要 localhost 高效互通的场景。

二 常用网络命令

  • 查看网络列表:docker network ls
  • 创建网络:
    • 自定义 bridge:docker network create --driver bridge --subnet 172.19.0.0/16 --gateway 172.19.0.1 mybridge_net
    • 跨主机:overlay(Swarm/集群)、macvlan(接入物理二层网络)
  • 连接/断开网络:docker network connect/disconnect
  • 查看网络详情:docker network inspect
  • 清理无用网络:docker network prune
  • 查看端口映射:docker port
  • 查看容器网络信息:docker inspect -f ‘{{.HostConfig.NetworkMode}} {{.NetworkSettings.Networks}}’

三 外部访问与端口映射

  • 映射语法:
    • 全部接口:-p 80:80
    • 指定地址:-p 127.0.0.1:80:80
    • 自动分配主机端口:-p 127.0.0.1::80
  • 示例:
    • 发布 Nginx 到宿主机 80:docker run -d -p 80:80 nginx:alpine
    • 仅本机访问:docker run -d -p 127.0.0.1:8080:80 nginx:alpine
  • 查看映射:docker port 80
  • 原理要点:bridge 模式下容器无公网 IP,外部访问依赖 NAT/端口映射;host 模式直接使用宿主机端口,无需映射。

四 容器互联与服务发现

  • 默认 bridge 网络不支持自动按容器名解析,建议使用自定义 bridge 网络
    • 创建网络:docker network create -d bridge my-net
    • 启动容器加入网络:
      • docker run -d --name web --network my-net nginx:alpine
      • docker run -it --name app --network my-net busybox sh
    • 在 app 容器内可直接 ping web(内置 DNS 将服务名解析为容器 IP)。
  • 跨主机网络:
    • overlay:用于 Swarm mode 多主机服务互联。
    • macvlan:为容器分配与物理网络同网段的 二层 MAC/IP,对物理网络“像一台真实主机”,适合需要直接接入现有二层网络的场景。

五 实战排错与最佳实践

  • 端口占用:启动失败提示 Bind for 0.0.0.0:80 failed: port is already allocated,改用未占用端口或停止占用进程;查看映射用 docker port
  • 主机网络端口冲突:使用 host 模式时,容器端口与宿主机端口直接复用,需确保端口未被占用。
  • 自定义网段规划:创建 bridge 时显式指定 –subnet/–gateway,避免与宿主机/物理网络冲突。
  • 外部无法访问:确认使用 -p 正确映射、云主机安全组/防火墙放行对应端口,bridge 模式对外不可达是预期行为
  • 容器间通信:优先使用自定义 bridge 以获得自动服务名解析与更好的隔离;需要极致网络性能且端口充足时再考虑 host;需要“像物理机一样”接入现有二层网络时使用 macvlan

0