docker-compose中link和external_links的区别及说明

 更新时间:2025年09月11日 17:35:03   作者:IT杂人  
拆分docker-compose.yml导致depends_on、links和external网络配置失效,因compose限制及Portainer命名冲突,解决方案为使用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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • DockerToolBox文件挂载的实现代码

    DockerToolBox文件挂载的实现代码

    这篇文章主要介绍了DockerToolBox文件挂载的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • IDEA中进行Docker项目部署的实现步骤

    IDEA中进行Docker项目部署的实现步骤

    这篇文章主要介绍了IDEA中进行Docker项目部署的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Docker部署及使用压测神器sysbench的方法

    Docker部署及使用压测神器sysbench的方法

    sysbench 是一个开源跨平台的多线程性能测试工具,这篇文章主要介绍了Docker部署及使用压测神器sysbench的相关知识,需要的朋友可以参考下
    2022-08-08
  • docker进行RocketMq集群部署方式

    docker进行RocketMq集群部署方式

    这篇文章主要介绍了docker进行RocketMq集群部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 简单谈谈Docker镜像的使用方法

    简单谈谈Docker镜像的使用方法

    本次分享从个人的角度,讲述对于Docker镜像的使用方法,包括了从从Docker Hub或者其他镜像源安装Docker镜像,从Image file安装Docker镜像,从Docker file制作Docker镜像,有需要的小伙伴可以参考下
    2016-10-10
  • CentOS7 Nexus安装步骤详细介绍

    CentOS7 Nexus安装步骤详细介绍

    这篇文章主要介绍了CentOS7 Nexus安装步骤详细介绍的相关资料,这里对CentOS7 安装Nexus 进行了详细介绍,需要的朋友可以参考下
    2016-11-11
  • Docker安装部署分布式数据库 OceanBase的详细过程

    Docker安装部署分布式数据库 OceanBase的详细过程

    这篇文章主要介绍了Docker安装部署分布式数据库 OceanBase,快速的体验 OceanBase 的自动化部署过程,及了解 OceanBase 集群安装成功后的目录特点和使用方法,需要的朋友可以参考下
    2022-06-06
  • Docker 仓库管理和Docker Dockerfile详解

    Docker 仓库管理和Docker Dockerfile详解

    仓库(Repository)是集中存放镜像的地方,以下介绍一下 Docker Hub,当然不止 docker hub,只是远程的服务商不一样,操作都是一样的,对Docker 仓库管理相关知识感兴趣的朋友一起看看吧
    2023-11-11
  • docker compose 安装 minio 文件服务器的流程

    docker compose 安装 minio 文件服务器的流程

    这篇文章主要介绍了docker compose安装minio文件服务器的流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-06-06
  • Docker网络IP地址冲突的解决方法

    Docker网络IP地址冲突的解决方法

    本文主要介绍了Docker网络IP地址冲突的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06

最新评论