基于多Docker Compose文件搭建本地开发网络的问题咨询
解决方案
1. 创建跨Compose的自定义桥接网络
先手动创建带固定子网的自定义网络,满足跨Compose复用、静态IP分配的需求:
docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.1 dev-lab-network
子网可自行调整,只要不与主机现有网络冲突即可。
2. 配置后端服务Compose文件(示例:docker-compose-backend.yml)
确保后端服务加入自定义网络、配置静态IP,不暴露端口到主机:
version: '3.8' services: sql-db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: your-db-password networks: dev-lab-network: ipv4_address: 192.168.100.10 # 移除ports配置,避免主机直接访问 networks: dev-lab-network: external: true # 引用已创建的外部网络
3. 配置应用服务Compose文件(示例:docker-compose-app.yml)
- 仅给proxy服务配置端口映射到主机
- 所有服务加入同一个自定义网络,配置静态IP
- 确保API服务与proxy在同一网络,支持内部服务名解析
version: '3.8' services: api-service-1: image: your-api-image:latest networks: dev-lab-network: ipv4_address: 192.168.100.20 # 移除ports配置,禁止主机直接访问 environment: DB_HOST: sql-db # 可通过服务名或静态IP访问后端 api-service-2: image: your-api-image:latest networks: dev-lab-network: ipv4_address: 192.168.100.21 # 移除ports配置,禁止主机直接访问 proxy: image: nginx:alpine ports: - "9001:80" # 仅proxy暴露端口到主机 volumes: - ./nginx.conf:/etc/nginx/nginx.conf # 挂载反向代理配置 networks: dev-lab-network: ipv4_address: 192.168.100.30 # proxy可通过服务名访问API,如http://api-service-2:80 networks: dev-lab-network: external: true
4. Nginx反向代理配置示例(nginx.conf)
确保proxy能通过内部服务名路由到API:
events {} http { server { listen 80; location /api1/ { proxy_pass http://api-service-1:80/; } location /api2/ { proxy_pass http://api-service-2:80/; } } }
核心要点说明
- 限制主机访问范围:所有API、后端服务必须移除
ports配置,仅保留proxy的端口映射,确保主机只能通过localhost:9001访问服务。 - 内部服务名解析:所有服务加入同一个自定义桥接网络后,Docker会自动提供DNS服务,支持用服务名(如
api-service-2)直接访问对应容器。 - 静态IP与互联网访问:自定义网络支持静态IP配置,且默认允许容器通过网关访问互联网,完全匹配需求。
内容的提问来源于stack exchange,提问作者user23137927
相关产品推荐
相关产品推荐

