码迷,mamicode.com
首页 > 其他好文 > 详细

Docker应用注册dubbo ip 的问题

时间:2018-01-06 15:58:01      阅读:4929      评论:0      收藏:0      [点我收藏+]

标签:集群   div   dock   文件中   自动   blog   必须   挂载   通过   

当docker容器部署dubbo提供者和常规部署应用混合使用一套zookeeper时,将出现Docker容器中的dubbo提供者向zookeeper注册容器IP导致常规部署应用无法访问容器IP而失败。

解决方法:

通过以上方法一手动绑定IP,可将宿主机IP绑定到/etc/hosts文件中,并将dubbo服务端口通过宿主机映射出来,这样Docker中的提供者将向zookeeper注册宿主机的IP

方法分析:

启动容器时通过--add-host="hostname:host_ip"的参数向容器的/etc/hosts文件添加容器主机名和宿主机IP的映射关系;
容器启动后默认会自动向/etc/hosts文件的最后一行追加”hostname”与容器IP的映射关系,因此必须删掉该行;
容器的/etc/hosts文件是由宿主机挂载到Docker中,所以使用sed/awk等命令时候将导致设备或者资源忙的错误,因此通过以下方法绕过

cp /etc/hosts /tmp/hosts
sed -i ‘$d‘ /tmp/hosts
cat /tmp/hosts > /etc/hosts

优化方案:

由于在集群中容器都是通过集群动态创建的,宿主机的IP是不固定的,需要让容器自动获取宿主机的IP并添加到/etc/hosts文件中。

首先在每台宿主机上创建一个/etc/ip的文件,文件内容为宿主机的IP;
启动容器时通过-v /etc/ip:/etc/ip将/etc/ip文件挂载到容器中,这样容器通过/etc/ip即可获取其所对应的宿主机IP;
通过以下脚本将容器hostname与宿主机IP进行绑定。

#!/bin/bash
HOST_IP=`cat /etc/ip`
cp /etc/hosts /tmp/hosts
sed -i ‘$d‘ /tmp/hosts
echo "$HOST_IP  $HOSTNAME" >> /tmp/hosts
cat /tmp/hosts > /etc/hosts
docker exec container /ip.sh

Docker应用注册dubbo ip 的问题

标签:集群   div   dock   文件中   自动   blog   必须   挂载   通过   

原文地址:https://www.cnblogs.com/flyhgx/p/8214174.html

(2)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!