docker绑定外网ip

puremans puremans     2022-08-23     233

关键词:

Docker容器使用静态独立的外部IP(便于集群组建)
 
  • 发表于 1年前
  •  
  • 阅读 1404
  •  
  • 收藏 12
  •  
  • 点赞 0
  •  
  • 评论 1

OSC福州源创会,报名开始啦!>>>   技术分享

摘要: 在VM时代,我们可以为不同的实例指定不同的静态IP,各个实例之间、实例与外部网络之间都可相互访问,那么Docker环境实现呢?

Issue

需要使用Docker虚拟化Hadoop/Spark等测试环境,并且要可以对外提供服务,要求是完全分布式的部署(尽量模拟生产环境)。那么我们会遇到几个问题:

  1. Container IP 是动态分配的
  2. Container IP 是内部IP,外部无法访问(如对外提供HDFS服务可能会遇到Client无法访问DataNode,因为DataNode注册的是内部IP)

针对第一个问题有不少的方案,可以指定静态的IP,对第二个问题,我们可以使用--net=host解决,但这会导致对外只有一个IP,集群各个Slave的端口都要修改。至于pipework简单地看了下,好像也解决不了。

所以目前看上去只能使用看上去不是很优雅的方案解决,如下:

Solution

方法很简单:为Docker宿主网卡绑定多个IP,把这些IP分配给不同的容器。

//这是示例,我是在windows下用Docker toolbox运行的
root@default:~# ifconfig
docker0   Link encap:Ethernet  HWaddr 02:42:8C:8E:80:F1  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 08:00:27:24:D1:F5  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe24:d1f5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:222 errors:0 dropped:0 overruns:0 frame:0
          TX packets:164 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:32277 (31.5 KiB)  TX bytes:28136 (27.4 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:76:1D:9B  
          inet addr:192.168.99.100  Bcast:192.168.99.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe76:1d9b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:66 errors:0 dropped:0 overruns:0 frame:0
          TX packets:64 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:9001 (8.7 KiB)  TX bytes:10469 (10.2 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1152 (1.1 KiB)  TX bytes:1152 (1.1 KiB)

//eth1网卡是可以与外部交互,所以我们添加IP到这个网卡上
//第一步:添加了两个IP           
root@default:~# ifconfig eth1:0 192.168.99.10 netmask 255.255.255.0 up
root@default:~# ifconfig eth1:1 192.168.99.11 netmask 255.255.255.0 up
//再次查看,多了两个IP
root@default:~# ifconfig
...

eth1      Link encap:Ethernet  HWaddr 08:00:27:76:1D:9B  
          inet addr:192.168.99.100  Bcast:192.168.99.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe76:1d9b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2258 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1685 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:207033 (202.1 KiB)  TX bytes:209587 (204.6 KiB)

eth1:0    Link encap:Ethernet  HWaddr 08:00:27:76:1D:9B  
          inet addr:192.168.99.10  Bcast:192.168.99.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1:1    Link encap:Ethernet  HWaddr 08:00:27:76:1D:9B  
          inet addr:192.168.99.11  Bcast:192.168.99.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
...

//第二步:运行容器,指定IP,这里的示例容器开启的SSH服务,后面拿它测试
root@default:~# docker run -d -p 192.168.99.10:222:22 --name ssh1 gudaoxuri/scala-2.11-env
root@default:~# docker run -d -p 192.168.99.11:222:22 --name ssh2 gudaoxuri/scala-2.11-env
root@default:~# docker ps
CONTAINER ID        IMAGE                      COMMAND               CREATED             STATUS              PORTS                       NAMES
ab024af9c954        gudaoxuri/scala-2.11-env   "/usr/sbin/sshd -D"   4 seconds ago       Up 3 seconds        192.168.99.11:222->22/tcp   ssh2
259351134d16        gudaoxuri/scala-2.11-env   "/usr/sbin/sshd -D"   15 seconds ago      Up 14 seconds       192.168.99.10:222->22/tcp   ssh1

//测试连接,在Docker宿主机上SSH到第一个容器
root@default:~# ssh 192.168.99.10 -p222
The authenticity of host ‘[192.168.99.10]:222 ([192.168.99.10]:222)‘ can‘t be established.
RSA key fingerprint is ac:fe:4b:89:f8:51:b7:e9:9c:34:62:f9:80:38:4b:bf.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘[192.168.99.10]:222‘ (RSA) to the list of known hosts.
root@192.168.99.10‘s password: 
Last login: Wed Oct  7 13:12:35 2015 from 192.168.99.1
//成功进入
[root@259351134d16 ~]# 
//在第一个容器中SSH到第二个容器
[root@259351134d16 ~]# ssh 192.168.99.11 -p222
root@192.168.99.11‘s password: 
Last login: Wed Oct  7 13:14:53 2015 from 172.17.42.1
//也OK了
[root@ab024af9c954 ~]#

docker虚拟网桥实现固定ip,容器互通,外网可用

提示:Docker不再兼容CentOS6,在使用docker的时候请将系统进行升级CentOS最低版本7.0 kernel最低3.10.0注意关闭SElinux和iptables等防火墙一、更新阿里云CentOS源,安装Docker备份yum源# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/... 查看详情

docker网络(代码片段)

Docker网络概况                              用一张图来说明Docker网络的基本概况:四种单节点网络模式                              bridge模式    ... 查看详情

java设置linux外网出口ip

最近爬虫项目中被封,服务器上绑定了多个ip,就想着怎样才能把多个ip都利用起来,想过设置成代理服务器的想法,但是由于某些原因放弃,所以采用动态改变服务器出口ip的方式将多个ip利用起来。首先获取服务器绑定的ippubli... 查看详情

docker不能被外网正常访问

问题描述:1.docker容器不能被外部网络正常访问2.docker所在服务器可以正常访问3.docker启动时报 ip_forward错误  排查1.防火墙是否开发端口访问(开通一个端口被访问 iptables-IINPUT-ptcp--dport20000-jACCEPT)2.针对第三个问题... 查看详情

外网设置端口映射怎么做?

...进入“应用管理”后,可以看到如下界面,选择“IP与MAC绑定”;4、把需要映射的主机进行IP绑定,如果不绑定静态IP,在DHCP重新分配IP后会导致映射失效。设置好之后记得点击保存5、返回应用列表,找到虚拟服务器,点击进入... 查看详情

微信小程序ip白名单是指外网ip还是内网ip呢?如:192.168.2.144还是外网的ip?

...”右侧的“详情”按钮,打开如下页面并点击右下角的“绑定运营者微信号”按钮,进行绑定运营者帐号。5、点击后打开窗口,在此窗口中先点选按钮并下方输入运营者帐号,这帐号一般可以为:微信号、QQ号、手机号,只要输... 查看详情

关于破天binderror1的一些问题,希望达人指导...

...andy达人说可以外网连接游戏,只要把外网IP网关和自己的IP绑定正确就可以,但是在这就遇见了问题......1:我是大学教育网,学生使用的都是内网,不是外网拨号连接2:网关是59.65.172.1但是外网IP是218.249.29.143所以出不知道绑定网关还是... 查看详情

电脑内网和外网怎么同时使用!

...连接已经启用,硬件的连接与安装就算完成了。第二步:绑定双网卡下载并安装绑定双网卡的软件“NICExpress”弹出“绑定”窗口后,在中间文本框中输入绑定后的连接名称,点击“Add”按钮将两块网卡加入到下面的“AssignedAdpaters... 查看详情

docker容器怎样实现绑定公网ip/浮动ip

...口用--publishforward进容器里,或者说把端口发布出来。如dockerrun-p80:80nginx2、把某个虚拟或物理interfacebridge进容器里,可以用一个叫pipework的工具:3、直接不对容器网络做虚拟化/隔离,用--net=host准备工作在使用weave之前,你需要在... 查看详情

每个docker一个ip地址吗

dockerrun创建Dockercontains时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式:host模式,使用--net=host指定。container模式,使用--net=container:NAME_or_ID指定。none模式,使用--net=none指定。bridge模式,使用--net=bridge指定,默... 查看详情

docker一台服务器部署多容器,容器a无法通过宿主机外网ip访问另外一个容器b分析

首先出现这个问题,都是iptables---inputchain 设置了默认Policy 为 Drop导致的(如果默认全都是 accept或者没有其他拒绝策略,肯定是没问题的。)这是我服务器上的INPUT规则如下:  3306,6379那几个, 分别是m... 查看详情

linux双网卡内外网服务器ip配置?

...由器的网卡也可以正常有网络。参考技术A首先做双网卡绑定,具体步骤上网搜吧,很多,思路就是通过绑定的虚拟接口bond0进行通讯,bond0设置外网IP,在bond0上再开启一个子接口为内网IP。用一台交换机做交换,很便宜的傻交换... 查看详情

外网如何访问service?-每天5分钟玩转docker容器技术(139)

除了Cluster内部可以访问Service,很多情况我们也希望应用的Service能够暴露给Cluster外部。Kubernetes提供了多种类型的Service,默认是ClusterIP。ClusterIP Service通过Cluster内部的IP对外提供服务,只有Cluster内的节点和Pod可访问,这是默... 查看详情

docker网络类型(代码片段)

Docker网络类型Docker网络类型目录Docker网络类型跟VMware对比VMwareDockerroute命令Docker的网络工作模式Bridge模式host模式Container模式none模式自定义网络模式跟VMware对比VMwareVMware工作模式1.桥接模式物理机网卡和虚拟机网卡桥接,让虚拟机... 查看详情

docker初探,日积月累

dockersearchnginx搜索外网仓库的镜像dockerpulldocker.io/nginx从外网仓库下载镜像docerimages查看本地服务器镜像列表dockersavedu-sh文件名查看文件大小启动docker容器dockerrun-itddockerio/nginx查看容器dockerps-a查看容器IP地址dockerinspect容器ID|grep-iipa... 查看详情

如何从外网访问内网

...况下,只能考虑用软件实现方案,如在内网通过软件将域名绑定服务器方式。域名绑定服务器方式,是当前应用比较多,且成熟的应用。如nat123端口映射域名解析软件。在内网启用后,可以将域名绑定到内网服务器,内网服务器部... 查看详情

内网web服务器ip如何映射到外网

...在路由器内分配一个静态IP,如图在讲台IP栏里输入想要绑定的IP,Mac地址栏里输入主机的Mac地址,绑定静态IP4、在服务DDNS栏里分别填入自己的域名信息,包括服务提供商,用户名,密码,以及想要映射的服务器的域名,内网映... 查看详情

docker使用错误小结(代码片段)

一、docker端口映射到宿主机后外网无法访问(防火墙已关闭)解决方法:#启用IP路由转发功能:[[email protected]~]#echo1>/proc/sys/net/ipv4/ip_forward或者[[email protected]~]#sysctl-wnet.ipv4.ip_forward=1#以上两种方法都可能立即开启路由功... 查看详情