Docker 容器网络入门:从桥接到自定义网络

举报
yd_257742204 发表于 2026/10/30 09:00:19 2026/10/30
【摘要】 本文介绍 Docker 容器网络的核心概念:默认网络、桥接模式、自定义网络、容器间通信及常见问题排查。

前言

容器跑起来了,但应用之间、容器与外部如何通信?这就是容器网络要解决的问题。Docker 提供了多种网络模式,理解它们的区别能帮你避免"容器内能 ping 通,宿主机访问不了"的坑。

Docker 默认网络

安装 Docker 后会自动创建三个网络:

docker network ls
NETWORK ID    NAME    DRIVER    SCOPE
bridge        bridge  bridge    local
host          host    host      local
none          none    null      local

bridge(桥接网络):默认模式。容器连接到虚拟网桥 docker0,通过 NAT 与外部通信。容器之间可通过 IP 通信,默认无法通过容器名互访。

host(主机模式):容器直接使用宿主机网络,不隔离。性能最好,但端口冲突风险高。

none(无网络):容器没有网络接口,完全隔离。适合处理敏感数据。

桥接网络详解

宿主机:  docker0 (172.17.0.1/16)
           │
    ┌──────┼──────┐
    │      │      │
容器A:  容器B:  容器C:
172.17.0.2  172.17.0.3  172.17.0.4

容器访问外部:容器 → docker0 → iptables NAT → 宿主机 IP → 外部
外部访问容器:需 -p 宿主机端口:容器端口 做端口映射

# 运行容器并映射端口
docker run -d -p 8080:80 nginx

# 查看端口映射
docker port nginx
# 80/tcp -> 0.0.0.0:8080

用户自定义网络

bridge 网络无法通过容器名互访,自定义网络可以:

# 创建自定义桥接网络
docker network create app-net

# 运行容器并加入网络
docker run -d --name db --network app-net postgres
docker run -d --name api --network app-net my-api

# api 容器内可直接用 db 名连接数据库
# psql -h db -U postgres

自定义网络底层是 DNS 服务,Docker 内嵌 DNS 解析器负责将容器名映射到 IP。

网络模式对比

模式 隔离性 性能 端口冲突 适用场景
bridge 中 中 无 通用场景
host 无 最高 有 高性能、低延迟
none 完全 - - 无网络需求
overlay 跨主机 中 无 集群/分布式

容器间通信

同用户网络:直接用容器名互访,DNS 自动解析。

不同网络:容器可加入多个网络:

# 将已有容器加入新网络
docker network connect app-net nginx

# 断开网络
docker network disconnect app-net nginx

跨容器通信(不建网络):用 --link(已废弃,不推荐)。

实战:前后端分离

# 创建前后端网络
docker network create web-net

# 启动后端 API
docker run -d --name api --network web-net -p 3000:3000 my-api

# 启动前端 Nginx
docker run -d --name web --network web-net -p 80:80 nginx

# web 容器内可访问 http://api:3000

前端通过容器名 api 访问后端,无需写死 IP。

常见问题

1. 容器内无法访问宿主机服务

容器通过 bridge 网络访问宿主机,默认用宿主机 IP(172.17.0.1 是 docker0 网关)。如果宿主机服务绑定在 127.0.0.1,容器无法访问——改绑 0.0.0.0 即可。

2. 外部无法访问容器服务

检查端口映射 -p 宿主机端口:容器端口,确认防火墙未拦截。

3. 容器间无法用名称互访

未使用自定义网络。bridge 网络默认无 DNS,需用 IP 或创建自定义网络。

4. 端口冲突

host 模式下容器直接用宿主机端口,同一端口只能被一个容器占用。

小结

  • bridge 是默认网络,通过 NAT 与外部通信
  • 自定义网络支持容器名 DNS 解析,推荐用于多容器应用
  • host 模式性能最好但无隔离,适合单容器高性能场景
  • 容器可加入多个网络,实现灵活的通信拓扑
  • 宿主机服务绑 0.0.0.0 才能被容器访问

容器网络是微服务架构的基础,理解这些模式就够应对 90% 的日常场景了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。