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

author author     2023-04-24     447

关键词:

有多种方法:
1、把端口用 --publish forward 进容器里,或者说把端口发布出来。如 docker run -p 80:80 nginx
2、把某个虚拟或物理 interface bridge 进容器里,可以用一个叫 pipework 的工具:
3、直接不对容器网络做虚拟化/隔离,用 --net=host
准备工作
在使用 weave 之前,你需要在所有宿主机上安装 Docker 环境,参考这些教程,在 Ubuntu 或 CentOS/Fedora 发行版中安装 Docker。
Docker 环境部署完成后,使用下面的命令安装 weave:
$ wget https://github.com/zettio/weave/releases/download/latest_release/weave
$ chmod a+x weave
$ sudo cp weave /usr/local/bin
注意你的 PATH 环境变量要包含 /usr/local/bin 这个路径,请在 /etc/profile 文件中加入一行(LCTT 译注:要使环境变量生效,你需要执行这个命令: source /etc/profile):
export PATH="$PATH:/usr/local/bin"
在每台宿主机上重复上面的操作。
Weave 在 TCP 和 UDP 上都使用 6783 端口,如果你的系统开启了防火墙,请确保这两个端口不会被防火墙挡住。

在每台宿主机上启动 Weave 路由器
当你想要让处于在不同宿主机上的容器能够互相通信,第一步要做的就是在每台宿主机上启动 weave 路由器。
第一台宿主机,运行下面的命令,就会创建并开启一个 weave 路由器容器(LCTT 译注:前面说过了,weave 路由器也是一个容器):
$ sudo weave launch
第一次运行这个命令的时候,它会下载一个 weave 镜像,这会花一些时间。下载完成后就会自动运行这个镜像。成功启动后,终端会输出这个 weave 路由器的 ID 号。
下面的命令用于查看路由器状态:
$ sudo weave status

第一个 weave 路由器就绪了,目前为止整个 peer 对等网络中只有一个 peer 成员。
你也可以使用 docker 的命令来查看 weave 路由器的状态:
$ docker ps

第二台宿主机部署步骤稍微有点不同,我们需要为这台宿主机的 weave 路由器指定第一台宿主机的 IP 地址,命令如下:
$ sudo weave launch <first-host-IP-address>
当你查看路由器状态,你会看到两个 peer 成员:当前宿主机和第一个宿主机。

当你开启更多路由器,这个 peer 成员列表会更长。当你新开一个路由器时,要指定前一个宿主机的 IP 地址,请注意不是第一个宿主机的 IP 地址(LCTT 译注:链状结构)。
现在你已经有了一个 weave 网络了,它由位于不同宿主机的 weave 路由器组成。

把不同宿主机上的容器互联起来
接下来要做的就是在不同宿主机上开启 Docker 容器,并使用虚拟网络将它们互联起来。
假设我们创建一个私有网络 10.0.0.0/24 来互联 Docker 容器,并为这些容器随机分配 IP 地址。
如果你想新建一个能加入 weave 网络的容器,你就需要使用 weave 命令来创建,而不是 docker 命令。原因是 weave 命令内部会调用 docker 命令来新建容器然后为它设置网络。
下面的命令是在宿主机 hostA 上建立一个 Ubuntu 容器,然后将它放到 10.0.0.0/24 网络中,分配的 IP 地址为 10.0.0.1:
hostA:~$ sudo weave run 10.0.0.1/24-t -i ubuntu
成功运行后,终端会显示出容器的 ID 号。你可以使用这个 ID 来访问这个容器:
hostA:~$ docker attach <container-id>
在宿主机 hostB 上,也创建一个 Ubuntu 容器,IP 地址为 10.0.0.2:
hostB:~$ sudo weave run 10.0.0.2/24-t -i ubuntu
访问下这个容器的控制台:
hostB:~$ docker attach <container-id>
这两个容器能够互相 ping 通,你可以通过容器的控制台检查一下。

如果你检查一下每个容器的网络配置,你会发现有一块名为“ethwe”的网卡,你分配给容器的 IP 地址出现在它们那里(比如这里分别是 10.0.0.1 和 10.0.0.2)。

Weave 的其他高级用法
weave 提供了一些非常巧妙的特性,我在这里作下简单的介绍。

应用分离
使用 weave,你可以创建多个虚拟网络,并为每个网络设置不同的应用。比如你可以为一群容器创建 10.0.0.0/24 网络,为另一群容器创建 10.10.0.0/24 网络,weave 会自动帮你维护这些网络,并将这两个网络互相隔离。另外,你可以灵活地将一个容器从一个网络移到另一个网络而不需要重启容器。举个例子:
首先开启一个容器,运行在 10.0.0.0/24 网络上:
$ sudo weave run 10.0.0.2/24-t -i ubuntu
然后让它脱离这个网络:
$ sudo weave detach 10.0.0.2/24<container-id>
最后将它加入到 10.10.0.0/24 网络中:
$ sudo weave attach 10.10.0.2/24<container-id>

现在这个容器可以与 10.10.0.0/24 网络上的其它容器进行通信了。这在当你创建一个容器而网络信息还不确定时就很有帮助了。

将 weave 网络与宿主机网络整合起来
有时候你想让虚拟网络中的容器能访问物理主机的网络。或者相反,宿主机需要访问容器。为满足这个功能,weave 允许虚拟网络与宿主机网络整合。
举个例子,在宿主机 hostA 上一个容器运行在 10.0.0.0/24 中,运行使用下面的命令:
hostA:~$ sudo weave expose 10.0.0.100/24
这个命令把 IP 地址 10.0.0.100 分配给宿主机 hostA,这样一来宿主机 hostA 也连到了 10.0.0.0/24 网络上了。显然,你在为宿主机选择 IP 地址的时候,需要选一个没有被其他容器使用的地址。
现在 hostA 就可以访问 10.0.0.0/24 上的所有容器了,不管这些容器是否位于 hostA 上。
参考技术A   绑定公网IP有多种方法:
  1、把端口用 --publish forward 进容器里,或者说把端口发布出来。如 docker run -p 80:80 nginx
  2、把某个虚拟或物理 interface bridge 进容器里,可以用一个叫 pipework 的工具:
  3、直接不对容器网络做虚拟化/隔离,用 --net=host
  浮动IP
  浮动IP目前没有成熟的方案,在我看来,一个是自己写agent来通过iptables自动完成漂移,另一个是寄希望于官方的libnetwork
参考技术B 绑定公网IP有多种方法:
1、把端口用 --publish forward 进容器里,或者说把端口发布出来。如 docker run -p 80:80 nginx
2、把某个虚拟或物理 interface bridge 进容器里,可以用一个叫 pipework 的工具:
3、直接不对容器网络做虚拟化/隔离,用 --net=host
浮动IP
浮动IP目前没有成熟的方案,在我看来,一个是自己写agent来通过iptables自动完成漂移,另一个是寄希望于官方的libnetwork

dockerkeepalivedvip怎么绑定

...绑定公网IP有多种方法:  1、把端口用--publishforward进容器里,或者说把端口发布出来。如dockerrun-p80:80nginx  2、把某个虚拟或物理interfacebridge进容器里,可以用一个叫pipework的工具:  3、直接不对容器网络做虚拟化/隔离,... 查看详情

docker容器不能联网

...dpoint:Inaccessiblehost:`dynamodb.us-east-1.amazonaws.com‘ 别慌!Docker容器内不能联网的6种解决方案 注:下面的方法是在容器内能ping通公网IP的解决方案,如果连公网IP都ping不通,那主机可能也上不了网(尝试ping8.8.8.8)1.使用--net:h... 查看详情

docker网络实现(代码片段)

1、在纯Docker的环境,Docker支持4类网络模式:●host模式:使用宿主机的IP和端口●container模式:和已存在的容器共享网络●none模式:不进行网络配置●bridge模式:默认模式,使用桥接网络,Kubernetes使用此模式。2、Docker网络模型通过上... 查看详情

docker搭建redis-cluster(代码片段)

文章目录docker搭建redis-cluster(公网可访问)获取redis镜像redis配置单个redis配置使用脚本生成3主3从的配置文件和目录启动各个redis容器构建redis集群公网连接校验问题和优化docker搭建redis-cluster(公网可访问)网上很多教程,但是那... 查看详情

docker容器之间的通信(代码片段)

前言平常在使用Docker容器部署项目的时,比如我们构建一个SpringBoot项目的容器和一个Redis的容器,我们希望SpringBoot项目可以正常访问到Redis容器,通常做法是这样的:假如我们的服务器公网IP地址是178.78.7.8,... 查看详情

nginx反向代理docker容器进行域名解析绑定的实现方法

参考技术A可以把多个域名映射到同一个IP地址上docker镜像名称由REPOSITORY和TAG组成[REPOSITORY[:TAG]],TAG默认为latest在宿主机创建持久化conf--配置目录html--静态网站目录logs--日志目录cert--存放证书目录将容器内的nginx.conf与default.conf文... 查看详情

Docker:更改已创建容器上的端口绑定而不会丢失数据

】Docker:更改已创建容器上的端口绑定而不会丢失数据【英文标题】:Docker:changeportbindingonanalreadycreatedcontainerwithnodataloss【发布时间】:2018-11-1419:47:46【问题描述】:假设我有一个带有大量数据的MongoDb或SqlServer容器,突然间(这... 查看详情

7.docker技术入门与实战---端口映射与容器互联(代码片段)

第7章 端口映射与容器互联 docker除了通过网络访问外,还提供两个很方便的功能来满足服务访问的基本需求: 1.允许映射容器内的应用端口到本地宿主机; 2.互联机制实现多个容器间通过容器名来快速访问。7.1 端口映射实... 查看详情

怎样从外网访问内网docker容器(代码片段)

外网访问内网Docker容器局域网里的主机上安装了Docker容器,只能在内网访问,怎样从外网也能访问内网的Docker容器?本文将介绍具体的实现步骤。1.准备工作1.1安装并启动Docker容器Docker容器默认的sshd端口是22。2.实现步骤2.1下载... 查看详情

docker-端口映射

Docker-端口映射Docker端口映射docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。亦可使用Dockerfile文件中的EXPOSE指令来配置。端口映射可使用-p、-P来实现:-p指定要... 查看详情

docker映射网络路径

参考技术A端口映射主要原理是利用host机的ip地址和端口来访问容器ip和端口,类似我们的家用路由器开启的端口映射,能够将运营商分配的公网IP+端口映射成为路由器下方的IP+端口。在端口映射之前先把容器整体架构图放上。 查看详情

docker绑定外网ip

Docker容器使用静态独立的外部IP(便于集群组建) 收藏孤岛旭日 发表于 1年前 阅读 1404 收藏 12 点赞 0 评论 1OSC福州源创会,报名开始啦!>>>   摘要:在VM时代,我们可以... 查看详情

docker网络(代码片段)

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

防火墙是不是能同时进行私网ip的nat和公网ip的转发?

...接口接收的数据既有私有IP,又有公有IP,防火墙能不能实现把私网IP进行NAT后,公网IP不做NAT,一起转发到外网中呢?连接内网口的端口,进入的数据包可以是私有IP,也可以是公网IP。防火墙从内网口,既接收私有IP,又接收公... 查看详情

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-br0,当然也可以取其他的名字,指定网桥的网段为172.172.0.0/24:创建网络后,查看当前主机的网络环境,环境中多出了名称为br-760119ea5907的网卡,且docker网络出现刚创... 查看详情

docker:docker实现同ip网段联通

参考技术A最近解决docker与宿主机同网段通信的问题,写此文章记录一下整个过程。例如宿主机A和宿主机B是网络联通关系,在宿主机A上面创建了多个容器组成集群,但是我希望通过宿主机B也可以访问到宿主机A的容器,当然,你... 查看详情

docker:docker实现同ip网段联通(代码片段)

最近解决docker与宿主机同网段通信的问题,写此文章记录一下整个过程。例如宿主机A和宿主机B是网络联通关系,在宿主机A上面创建了多个容器组成集群,但是我希望通过宿主机B也可以访问到宿主机A的容器,当然,你也可能会... 查看详情