Docker Compose 网络:自定义网络与容器通信
·
Docker Compose 网络:自定义网络与容器通信
在 Docker Compose 中,自定义网络是实现容器间高效通信的核心机制。默认情况下,Compose 会自动创建一个名为 default 的网络,但自定义网络能提供更精细的控制(如隔离性、IP 地址管理)。以下是关键概念与操作步骤:
1. 自定义网络的优势
- 隔离性:不同项目的容器互不干扰
- DNS 自动解析:容器可通过服务名直接通信(无需 IP)
- 网络配置灵活性:支持定义子网、网关、驱动类型(如
bridge,overlay)
2. 配置自定义网络
在 docker-compose.yml 中定义网络:
version: '3.8'
# 定义自定义网络
networks:
my-custom-network:
driver: bridge # 网络驱动类型
ipam:
config:
- subnet: 172.28.0.0/16 # 指定子网
# 服务配置
services:
webapp:
image: nginx:alpine
networks:
- my-custom-network # 加入自定义网络
database:
image: postgres:14
networks:
- my-custom-network
3. 容器间通信规则
-
通过服务名访问:
webapp容器可直接用database主机名访问数据库(例如ping database)。 -
跨网络通信:
若需访问其他自定义网络,需显式声明:services: webapp: networks: - my-custom-network - another-network # 加入其他网络 -
端口映射限制:
容器间通信无需暴露端口到主机(如ports配置),仅需确保在同一网络。
4. 验证通信
进入容器测试连通性:
# 进入 webapp 容器
docker-compose exec webapp sh
# 测试连接数据库
ping database # 应返回数据库容器的 IP
curl http://database:5432 # 测试服务端口
5. 常见问题解决
- DNS 解析失败:
检查容器是否加入同一网络,并确保服务名拼写正确。 - 网络驱动不兼容:
overlay驱动需 Swarm 集群支持,单机环境使用bridge。 - IP 冲突:
通过ipam.config.subnet显式指定子网避免冲突。
最佳实践:始终为生产环境配置自定义网络,避免使用默认的
default网络,以提升安全性和可维护性。
更多推荐
所有评论(0)