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

总结

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

相关文章

  • docker安装sentinel的实现示例

    docker安装sentinel的实现示例

    本文主要介绍了docker安装sentinel的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • Docker如何部署前端项目

    Docker如何部署前端项目

    这篇文章主要介绍了Docker如何部署前端项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Docker 教程之数据管理详细介绍

    Docker 教程之数据管理详细介绍

    这篇文章主要介绍了Docker 教程之数据管理详细介绍的相关资料,需要的朋友可以参考下
    2017-01-01
  • 详解docker-compose速度太慢解决方式

    详解docker-compose速度太慢解决方式

    这篇文章主要介绍了详解docker-compose速度太慢解决方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • docker-compose网络设置之networks的使用

    docker-compose网络设置之networks的使用

    本文详细解释了在使用 Docker Compose时如何配置网络,包括创建、使用和问题解决等方面,介绍了如何通过docker-compose.yml文件快速编排和部署应用服务,同时解决网络隔离问题,感兴趣的可以了解一下
    2024-10-10
  • PIP安装docker-compose超时问题解决方案

    PIP安装docker-compose超时问题解决方案

    这篇文章主要介绍了PIP安装docker-compose超时问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • docker搭建prometheus监控教程

    docker搭建prometheus监控教程

    这篇文章主要介绍了docker搭建prometheus监控教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • 保存修改docker并打包镜像实践

    保存修改docker并打包镜像实践

    文章介绍了如何通过docker commit将容器保存为镜像,并打包迁移,步骤包括获取镜像ID、指定提交说明和作者信息、保存镜像为tar.gz文件,最后在新服务器解压加载
    2025-07-07
  • spring-boot构建docker镜像上传仓库的示例教程

    spring-boot构建docker镜像上传仓库的示例教程

    这篇文章主要介绍了spring-boot构建docker镜像上传仓库,受限创建一个简单spring-boot-web项目,查看镜像上传仓库这时候有两种解决方案,对docker镜像上传仓库相关知识感兴趣的朋友跟随小编一起看看吧
    2022-12-12
  • 在Ubuntu中安装Docker和docker的使用方式

    在Ubuntu中安装Docker和docker的使用方式

    这篇文章主要介绍了在Ubuntu中安装Docker和docker的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04

最新评论