zoukankan      html  css  js  c++  java
  • Docker应用注册dubbo ip 的问题

    当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
    
  • 相关阅读:
    JVM内存结构
    JVM中的类加载
    数据库索引详解
    Spring IOC 总结
    Java多线程(一)—— 常见问题整理
    Java集合框架 面试问题整理
    Java8 Lambda表达式
    vue开发技巧
    mysql(MariaDB)问题处理
    字符串非空判断的效率问题
  • 原文地址:https://www.cnblogs.com/flyhgx/p/8214174.html
Copyright © 2011-2022 走看看