必须使用自定义bridge网络,因其支持容器名自动DNS解析、子网可控和安全隔离,而默认bridge网络不支持服务名解析且隔离性弱。

Docker 容器间通信通过 Bridge 网络实现,核心在于使用自定义 bridge 网络,而非默认的 bridge 网络。默认网络不支持服务名解析、隔离性弱、配置受限;自定义网络才具备容器名自动 DNS 解析、子网可控、安全隔离等关键能力。
为什么必须用自定义 bridge 网络
默认 bridge 网络(即 docker0)下,容器虽然能通过 IP 互通,但无法通过容器名互相访问,因为内置 DNS 服务不生效。而自定义 bridge 网络由 Docker 自动启用嵌入式 DNS,容器启动后即可直接用服务名(如 db、redis)发起请求,无需硬编码 IP 或手动维护 hosts。
- 默认 bridge:容器名不可解析,IP 易变,不推荐用于多容器协作
- 自定义 bridge:Docker 自动分配固定网段,支持服务名 → IP 自动映射
- 同一自定义网络内的容器默认二层互通,无需额外端口暴露或 iptables 规则
创建并使用自定义 bridge 网络
只需两步:创建网络 + 将容器接入该网络。推荐用 docker-compose.yml 统一编排,也可用命令行手动操作。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 创建网络:
docker network create --driver bridge --subnet 172.25.0.0/24 app-net - 运行容器并指定网络:
docker run -d --name web --network app-net -p 8080:80 nginx - 再起一个容器:
docker run -d --name api --network app-net python:3.9-slim - 验证通信:
docker exec web ping api或curl http://api:8000/health
在 docker-compose 中自动管理网络
Compose 文件天然支持自定义网络声明,服务名即为容器在网络中的 DNS 名称:
version: '3.8'
services:
frontend:
image: nginx
networks: [app-network]
backend:
image: myapp:latest
networks: [app-network]
environment:
DB_HOST: database # ← 直接用服务名作为 hostname
database:
image: postgres:15
networks: [app-network]
environment:
POSTGRES_PASSWORD: secret
<p>networks:
app-network:
driver: bridge
ipam:
config:</p><ul><li>subnet: 172.26.0.0/24
此时 frontend 可直接 curl http://backend:8000,backend 可直连 postgres://database:5432 —— 全部基于名称,稳定可靠。
常见误区与避坑点
实际使用中容易忽略以下细节,导致通信失败:
- 不要混用默认
bridge和自定义网络:跨网络容器默认不通,也不做 DNS 解析 - 容器必须在同一自定义网络下才能通过服务名通信;若已运行,可用
docker network connect app-network container-name动态加入 - 避免在自定义网络中手动指定
--ip,除非有严格地址规划;Docker 会自动分配且保证唯一 - 宿主机无法直接用服务名访问容器(如
curl http://web),需走ports映射或用host.docker.internal(仅限 Docker Desktop)

















