美文网首页程序员
通过修改dubbo源码实现Docker容器内部署

通过修改dubbo源码实现Docker容器内部署

作者: Markwei | 来源:发表于2016-10-29 19:32 被阅读0次

问题出现:由于最近在着手实施应用容器内部署,碰到了一个坑,在docker中部署dubbo应用时,出现外部访问问题,折磨了很久,终于解决,估分享以供参考.

原先使用的是docker默认的网络设置bridge,启动dubbo时,会在注册中心zookeeper上把provider注册成为的docker的内部IP,同一宿主上的容器互访没有问题,但是这样宿主外的机器却无法访问.解决这个问题过程如下

方案一,改默认网络设置为host

聪明的读者看到这,已经能很快知道通过 docker run --net=host ... 实现容器绑定宿主ip可以解决外部访问的问题,在bing上搜到的仅有的两篇关于dubbo在docker内部署的文章,也是这么描述的。

但是,这满足不了我的要求,容器内应用要暴露的不仅仅只有dubbo的端口,还有些其它的端口,绑定了主机ip,会造成同一台宿主上的其它容器为了避免端口冲突,不得不修改暴露的端口号,问题扩散,所以放弃,当然,如果你打算一台宿主只部署一个容器,这个还是可以采用的

方案二,给docker 容器配置主机同域的ip地址

通过第三方工具pipework给容器分配固定ip,这个需要给容器配置网卡,并且需要对容器做些设置,操作过于复杂,考虑到部署以后要移交给公司的运维人员,并且移植性差,所以没有采用

方案三, 深度修改dubbo源码

dubbo 提供了host 配置来指定dubbo的服务ip,如果把host设为宿主的ip, 会出现netty绑定ip地址失败,应为容器内和宿主不通,如果一定要这样做,需要打通容器和宿主机器的ip,这又回到方案二了。

通过深度修改dubbo源码,可以实现用宿主的ip注册到zookeeper上,然后让netty启动服务时绑定容器内部ip,但考虑到dubbo已经是个相对稳定的工程,且代码量庞大,过度修改风险太大,我也不想改动太多,造成一些隐藏的bug,给产品带来风险。

方案四,配合docker,部分修改源码

思考良久后,决定只在dubbo 注册provider 时,把provider的ip地址替换成宿主机器ip,netty启动服务时绑定的还是内部IP, 外部应用访问时,通过宿主的端口映射访问容器内的服务。
具体做法就是,容器启动时,给容器添加namehost,修改源码(修改不超过20行),替换dubbo注册provider时的ip地址.

到此,这个问题终于解决了。

欢迎访问 www.jokls.com

相关文章

  • 通过修改dubbo源码实现Docker容器内部署

    问题出现:由于最近在着手实施应用容器内部署,碰到了一个坑,在docker中部署dubbo应用时,出现外部访问问题,...

  • yapi-配置LDAP登录,禁止注册

    背景:yapi部署在docker容器内 进容器 修改配置官方文档已经很详细了哦:https://hellosean...

  • 什么是Docker?(部署篇)

    Docker部署 MySQL部署 在Docker容器中部署MySQL,并通过外部MySQL客户端去操作MySQL。...

  • Docker 容器连接

    前面我们实现了通过网络端口来访问运行在 docker 容器内的服务。下面我们来实现通过端口连接到一个 docker...

  • docker部署gitlab

    docker部署gitlab 下载镜像 运行容器 修改root用户密码 修改配置 修改gitlab.rb文件配置主...

  • 101、镜像的构建

    1、镜像构建方式 1.1、docker commit 运行容器 对容器进行修改 通过docker commit 把...

  • docker机制概述

    docker机制 docker是容器化的一种实现,可用来部署。 docker hub提供了很多社区开发的容器。 d...

  • Docker 实战

    Docker应用部署 前言:如上图,容器和外部机器是无法交互的,所以通过容器和宿主机的端口映射,来实现容器和外部机...

  • 解决Jenkins打包vue项目报env: ‘node’: No

    问题:通过docker容器化安装的Jenkins(参照:docker容器化安装Jenkins),在自动化部署vue...

  • 使用Java操作Docker

    本人在做实验过程中,需要通过Java程序部署docker容器。故尝试搜集资料,实现在Java端可以操作部署dock...

网友评论

    本文标题:通过修改dubbo源码实现Docker容器内部署

    本文链接:https://www.haomeiwen.com/subject/hpsjuttx.html