由于业务需求,后端服务要拆分为2个有上下游关系的服务,也算是顺应了微服务的潮流,今天分享一下如何将2个docker容器通信,多个容器也是同样的方式。
方案第一步: 创建自定义网络
第二步:通过docker-compose 部署相关服务
- 创建自定义网络,命令:docker network create --driver bridge network_name (network_name 可以自定义,但是需要和yaml文件里的networks的值保持一致)
- 创建docker-compose.yaml文件,并根据实际需求完善内容,例如:
version: "2"
services:
A_service:
image: A_service_image_name
ports:
- "6666:7777"
restart: "on-failure"
container_name: A_service
networks:
- network_name
working_dir: /app
B_service:
image: B_service_image_name
ports:
- "3333:4444"
restart: "on-failure"
container_name: B_service
networks:
- network_name
environment:
- "A_SERVICE_URL=http://A_service:6666"
working_dir: /app
networks:
network_name:
external: true
- 部署服务,命令:docker-compose -f docker-compose.yaml up -d, 此时在Docker里就可以看到一个网络下有2个容器, 进入B容器内,执行命令: ping A_service , 是可以ping通的,也就意味着这2个服务的通信是OK的。
- A_service是下游服务, 供B_service服务调用的, 从上文中的yaml文件可以看出, 定义为:http://A_service:6666, 也就是node名。
- 如果是通过docker run 一个个部署的话, 可以先正常部署A服务,然后在部署B服务时, 利用docker中–link参数。



