docker-compose中link和external_links的区别及说明
使用场景
原本把在同一个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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Docker安装部署分布式数据库 OceanBase的详细过程
这篇文章主要介绍了Docker安装部署分布式数据库 OceanBase,快速的体验 OceanBase 的自动化部署过程,及了解 OceanBase 集群安装成功后的目录特点和使用方法,需要的朋友可以参考下2022-06-06
Docker 仓库管理和Docker Dockerfile详解
仓库(Repository)是集中存放镜像的地方,以下介绍一下 Docker Hub,当然不止 docker hub,只是远程的服务商不一样,操作都是一样的,对Docker 仓库管理相关知识感兴趣的朋友一起看看吧2023-11-11
docker compose 安装 minio 文件服务器的流程
这篇文章主要介绍了docker compose安装minio文件服务器的流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2025-06-06


最新评论