Docker Compose网络配置完全指南_docker-compose networks
文章目录
- Docker Compose网络配置完全指南
Docker Compose网络配置完全指南
一、基础网络架构
1.1 默认网络行为
每个docker-compose.yml文件会自动创建:
- 1个专属bridge网络(默认驱动)
- 所有service自动加入该网络
- 服务间通过
服务名称
直接通信
# docker-compose.yml示例version: \'3.8\'services: web: image: nginx:alpine ports: - \"8080:80\" redis: image: redis:alpine
1.2 网络查看命令
# 查看项目网络docker network ls | grep <project_name># 查看容器网络详情docker-compose run web curl redis:6379
二、自定义网络配置
2.1 显式定义网络
version: \'3.8\'networks: frontend: driver: bridge ipam: config: - subnet: 172.20.0.0/24 backend: driver: bridgeservices: web: networks: - frontend - backend db: networks: - backend
2.2 多网络接入实战
services: app: networks: - payment_network - notification_networknetworks: payment_network: driver: bridge notification_network: driver: bridge
三、典型场景配置
3.1 微服务间通信
services: order-service: networks: - ecommerce environment: - CART_SERVICE_URL=http://cart-service:8000 cart-service: networks: - ecommercenetworks: ecommerce: driver: bridge
3.2 数据库隔离
services: mysql: networks: - db_internal configs: - source: mysql_conf target: /etc/mysql.cnf api: networks: - app_network - db_internalnetworks: db_internal: internal: true # 禁止外部访问 app_network: driver: bridge
四、高级网络技巧
4.1 静态IP分配
services: monitor: networks: monitoring_net: ipv4_address: 172.22.0.100networks: monitoring_net: ipam: config: - subnet: 172.22.0.0/24
4.2 跨项目通信
# 项目A的compose文件networks: shared_net: name: cross_project_net# 项目B的compose文件networks: shared_net: external: true name: cross_project_net
4.3 网络别名
services: database: networks: main_network: aliases: - primary-db - mysql.prodnetworks: main_network:
五、调试与诊断
5.1 网络测试容器
services: tester: image: nicolaka/netshoot command: sleep infinity networks: - app_network
5.2 常用诊断命令
# 查看容器网络配置docker-compose exec web ifconfig# 测试服务间连通性docker-compose run tester curl -v api:3000# 查看DNS解析docker-compose run tester dig web
六、最佳实践
-
命名规范:
- 项目名称使用小写+下划线
- 网络名称明确表达用途(如:payment_gateway)
-
环境隔离:
networks: staging: driver: bridge production: driver: bridge
-
安全配置:
networks: sensitive_data: driver: bridge internal: true enable_ipv6: false
-
性能优化:
networks: high_perf: driver: bridge options: com.docker.network.bridge.name: br-highperf com.docker.network.driver.mtu: 9000
七、完整实战案例
version: \'3.8\'networks: front: driver: bridge ipam: config: - subnet: 10.5.0.0/24 back: internal: trueservices: webapp: build: . networks: - front - back ports: - \"80:8000\" depends_on: - cache cache: image: redis:6 networks: - back volumes: - redis_data:/data db: image: postgres:13 networks: - back environment: POSTGRES_PASSWORD: examplevolumes: redis_data:
关键配置解读:
- 前端服务暴露80端口
- 数据库和缓存使用内部网络
- Web应用同时连接前后端网络
- 明确的子网规划(10.5.0.0/24)
- 数据卷独立于网络配置
八、常见问题解决方案
Q1:服务间无法解析主机名
- 检查是否使用相同网络
- 确认服务名称拼写正确
- 尝试使用完整域名:
.
Q2:端口冲突
ports: - \"127.0.0.1:8080:80\" # 限制本地访问 - \"8000-8010:8000-8010\" # 端口范围映射
Q3:网络性能瓶颈
- 尝试host网络模式(需要删除端口映射)
- 调整MTU值
- 使用macvlan驱动
networks: perf_net: driver: macvlan driver_opts: parent: eth0 ipam: config: - subnet: 192.168.1.0/24 gateway: 192.168.1.1
期待您能关注公众号
原宏Cloud运维栈
每天带你进步一点。