使用场景
原本把在同一个docker-compose.yml文件中的向个服务拆分为多个文件部署。
如拆分为单个服务的yml文件:原rocketmq
version: '2'
services:
namesrv:
image: apache/rocketmq:4.5.0
container_name: rmqnamesrv
ports:
- 9876:9876
volumes:
- ./data/namesrv/logs:/home/rocketmq/logs
command: sh mqnamesrv
broker:
image: apache/rocketmq:4.5.0
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
- 10912:10912
volumes:
- ./data/broker/logs:/home/rocketmq/logs
- ./data/broker/store:/home/rocketmq/store
- ./data/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
command: sh mqbroker -n namesrv:9876 -c ../conf/broker.conf
depends_on:
- namesrv
拆分后产生的问题:
1.depends_on 无法使用,所以改成links
2.发现各links无法使用
3.发现networks=>external无法使用
分析原因:
1.depends_on 是compose独有的功能,拆分后不在同一个yml文件内,无法继续识别其他服务
2.links与docker run中的links不一致,也是受限于同一个yml文件内
3.networks=>external无法使用:网络创建有问题,portainer的机制,使用compose创建自定义网络时,网络名会被强加上yml文件的Title(坑)前缀
4.尝试external_links
解决
- links改成external_links:external_links后面为其他容器的名称
environment:
- JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876
external_links:
- rmqnamesrv
- networks=>external:先手动创建网络
#1.手动创建一个自定义网络
docker network create rocketmq
或者在portainer上创建
2.再填写网络external: true信息
version: '2'
services:
broker:
image: commandcenter/public/rocketmq:latest
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
- 10912:10912
volumes:
- /opt/public/broker/logs:/home/rocketmq/logs
command: sh mqbroker -c ../conf/broker.conf -n rmqnamesrv:9876
external_links:
- rmqnamesrv
networks:
- rocketmq
networks:
rocketmq:
external: true