docker真实IP解决

背景

在微服务的环境中使用docker部署各个应用,部分应用使用容器内的真实ip暴露出服务。会导致微服务之间调用出现网络超时,要解决这个问题需要让微服务暴露为宿主机的ip

解决

方式一

使用docker-compose的配置 network_mode: "host"

bash 复制代码
emqx-auth:
    container_name: "xxApp"
    network_mode: "host"
    image: image
    restart: always
    environment:
      TZ: "Asia/Shanghai"
      APP_SERVICE: "gateway-v3-3.0.1-SNAPSHOT"
      START_COMMAND: "--spring.config.location=classpath:bootstrap.yml,/conf/base.yml,/conf/emqx-auth.yml"
      JAVA_OPTS: "-Xms512m -Xmx1024m"
      NACOS_IP: $NACOS_IP
    volumes:
      - "/cloud/service:/cloud/service"
    networks:
      - bridge1

方式二

使用docker 创建容器时指定参数 --network host

bash 复制代码
docker run image --network host --port 8080:8080 --name xxApp -d

方式三

如果使用的是nacos做注册中心、可在各个应用内部通过配置项指定host参数

bash 复制代码
spring.cloud.nacos.discovery.ip=192.168.12.32

在使用dubbo时也可以通过下面两种方式解决

暴露服务指定host

bash 复制代码
<dubbo:protocol name="dubbo" port="20890" host="主机地址"/>

设置环境变量

bash 复制代码
# DUBBO_IP_TO_BIND = 主机地址
docker run -e DUBBO_IP_TO_BIND=30.5.97.6  -p 30.5.97.6:20881:20880 --name xxApp -d
复制代码
不在docker环境直接设置系统的环境变量即可。

总结:

复制代码
1、	可以通过dubbo.protocol或dubbo.provider的host属性对host进行配置,
	支持IP地址和域名.但此时注册到注册中心的IP地址和监听IP地址是同一个值
	
2、	为了解决在虚拟环境或局域网内consumer无法与provider通信的问题,可以通过 环境变量 分别设置注册到注册中心的IP地址和监听IP地址,
	其优先级高于dubbo.protocol或dubbo.provider的host配置

官网参考:主机自定义

相关推荐
captain37611 分钟前
TCP网络编程:ServerSocket与Socket详解
服务器·网络·tcp/ip
IT小白杨3 小时前
eBay多账号如何应对关联判定:主体、收款、IP、环境四层配置清单一次讲清
java·网络·网络协议·tcp/ip·自动化·指纹浏览器
自律最差的编程狗4 小时前
Ubuntu下Docker部署Ollama 轻量模型
linux·ubuntu·docker
wdfk_prog4 小时前
大型 Docker 镜像导出导入工程化:可靠性、磁盘与压缩
运维·docker·容器
隐擎fox4 小时前
网络传输安全剖析:WebRTC 本地真实 IP 泄漏机制(STUN/TURN)与 Python 防护检测实战
网络·网络协议·tcp/ip·安全·webrtc
郝开5 小时前
Docker Compose 模块化多环境配置规范指南:示例搭建Alf Tengine MD2DOC 1.1.1
运维·docker·容器
Albart5755 小时前
Docker Desktop 增量更新失败终极排查:Failed to apply delta update 反复回滚怎么办?
windows·docker·容器·docker部署大模型
盛世宏博智慧档案6 小时前
以太网温湿度传感器 TCP/IP、UDP、SNMP 协议怎么选?区别详细分析
单片机·tcp/ip·udp·以太网温湿度传感器
Titan20246 小时前
网络学习:网络层与数据链路层知识梳理
服务器·网络·学习·tcp/ip
sibylyue6 小时前
【云原生系列3】Docker Compose单机多容器编排工具
运维·docker·容器