docker[-compose] 连接内网其他容器地址

原创内容,欢迎传播,请注明出处:http://www.cnblogs.com/johnd/p/set-docker-hostname.html

因为要部署 dubbo 服务到 docker 集群,在部署时遇到一个问题,就是dubbo会去获取 /etc/hosts 下面的 hostname 对应的IP地址作为 zookeeper 注册中心注册的 IP 地址,由于 docker 容器的 IP 是 172.17.0.2, 那注册到 zookeeper 的 IP 也就是 172.17.0.2 了。

那问题就来了,172.17.0.2 是 docker 容器的 IP, 容器外面是无法访问的,我的解决方案很简单,就是更改容器的 hostname 及其映射的 IP 来使得 dubbo 可以注册宿主的 IP 地址。

我是使用 docker-compose 来启动的, 在 docker-compose.yml 中添加 environment 和 extra_hosts 两个参数即可解决:

dubbo-service-provider:
  image: johnd/dubbo-service-provider:latest
  ports:
    - 9090:9090
    - 20880:20880

  environment:
    HOSTNAME: dubbo-service-provider

  extra_hosts:
     dubbo-service-provider: 192.168.0.100

然后运行 docker-compose up 命令,可以看到 dubbo 已经注册了正确的 IP 地址:

[DUBBO] Register: dubbo://192.168.0.100:20880/com.johnd.dubbo.service.api.SayHelloToJohn

如果你是用 docker run  来运行 docker 容器,也可以添加相应的命令行参数。

------------------------------------------------------------------------------------------------------------

更新:

其实可以有更简单的处理办法,就是直接使用主机网络,在docker-compose的配置文件添加 net: host 配置。

dubbo-service-provider:
  image: johnd/dubbo-service-provider:latest  net: host
  ports:
    - 9090:9090
    - 20880:20880

ps:

也可以使用 links 连接外部容器

links:
  - zookeeper

  

时间: 2024-11-08 18:21:45

docker[-compose] 连接内网其他容器地址的相关文章

配置windows路由表,使电脑同时连接内网外网方法

1.环境一(系统:windows xp,内网.外网不是同一类地址,内网地址固定): 外网:通过笔记本的无线网卡连接: 内网:通过笔记本的本地连接: 第一步,连接网线,配置本地连接地址,注意IP地址不要与其它在用ip冲突: 下图,本地连接配置10.9.1.189的内网地址. 外网地址,则由笔记本的无线网卡连接到路由器,自动获得的p地址,本机获得的IP地址为192.168.1.115. 现在测试,内网可以ping通其它任意主机,外网也连接,但打开浏览器,不能上网: 如果拔掉网线,外网就可以上网. 第

通过ssh管道连接内网数据库(mysql)

公网连接内网数据库(如云数据库)时,通常需要白名单:如果不是白名单IP,通常需要一个跳板机(类似代理)来连接内网数据库, 下方以mysql为例(其他数据库基本一致): import pymysql as mysqlfrom sshtunnel import SSHTunnelForwarder server=SSHTunnelForwarder((SSH.IP,SSH.PORT), #跳板机ip及端口 ssh_username=SSH.USERNAME, #跳板机账号 ssh_password=

外网主机A连接内网主机B

实现通过外网的主机A连接内网的主机B 设置内网主机B免密登陆外网主机A 在主机B中输入下面的命令,并且一直回车: ssh-keygen 然后会在/root/.ssh/下生成2个文件:id_rsa和id_rsa.pub. 可以用下面的命令查看: ls /root/.ssh/ 在外网主机A中建立自己的文件夹,用来存id_rsa.pub文件.把内网主机B中的id_rsa.pub发到外网主机A的文件夹中: scp ~/.ssh/id_rsa.pub [email protected]123.206.18

通过ssh tunnel连接内网ECS和RDS

? 通过ssh tunnel连接内网ECS和RDS 这里讲了ssh tunnel的原理.很清晰. 此后又给外网访问内网增加了一种思路.感觉特别棒.

利用ssh反向代理以及autossh实现从外网连接内网服务器

1. 描述一下目前的机器状况,梳理梳理: 机器 IP 用户名 备注 A 10.21.32.106 gdut728 目标服务器,处于内网 B 123.123.123.123 root 外网服务器,相当于桥梁的作用 PS:123.123.123.123只是我随意起的,大家请别攻击别人的服务器啊啊啊 2. 解决方法: 通俗地说:就是在机器A上做到B机器的反向代理:然后在B机器上做正向的代理实现本地端口的转发 2.1 实现前的准备 每台都要安装ssh的客户端. 在这里我使用的是centos7,都自带ss

手机连接内网设置代理--通过fiddler走本地

1.手机链接内网,设置代理 公司内网,两个KPI都能用,用户名:邮箱前缀,密码:邮箱密码 轻触wifi名字进入设置.服务器填写本机IP 2.fiddler设置

从外网连接内网的打印机

使用cups 共享打印机 之前一直无法从 只需要在路由器中使用端口转发功能即可,主要是使得局域网与外网之间可以通信. uploading-image-255830.png 参考 http://service.tp-link.com.cn/detail_article_2834.html 原文地址:https://www.cnblogs.com/upuil/p/9164804.html

BAT&VBS脚本:Windows连接VPN后同时登陆内网和外网

今天连公司的VPN,发现连上去之后就登陆不了外网了,上网查了下,再加上与同事的交流,发现连接VPN后同时登陆外网需要下面几个步骤: (我的环境:Windows 7 旗舰版 Service Pack 1) 1)建立好VPN,连接VPN 2)进入到VPN属性页面 3)找到网络选项卡,选中"Internet版本协议4(TCP/IPv4)",点击下方的"属性"按钮 4)在"Internet版本协议4(TCP/IPv4)"的属性界面中,点击"高级

CiscoVPNclient连接成功,却无法解析内网的FQDN的解决办法

最近公司计划使用vpn,就在cisco1841路由器 启用了原先的vpn服务,但是,最近有同事反应使用cisco vpn client连接上vpn后,可以连接公司内部的网络,但是如果通过域名(FQDN)就无法进行访问. 拿自己电脑测试了下,发现只获取了IP地址,没有得到网关和DNS,那客户端是如何连接内部网络呢? 通过VPNclient连接公司网络后,使用tracert命令跟踪网络,结果显示是直接通过vpn路由器的内网的IP地址连接过去的.那它是如何找到vpn路由器的内网呢?route了本地的路