情况:


具有3个以上节点的docker swarm
服务在swarm中运行,副本数= 1,并且重新启动=总是
swarm主机具有多个接口-每个接口一个具有相同名称的vlan
服务被部署为堆栈

我想用运行docker的同一个替换在静态IP上的VM中运行的服务。在ETH_SERVER接口上使用相同的SERVICE_IP。

对于具有静态ip的一个或多个服务,我有什么选择?

A。在docker stack yml中添加了ipv4_address-似乎尚未在docker中实现(至少尚未实现)

B。将具有反向代理的新主机添加到Docker堆栈服务

C。在docker主机上使用keepalived并映射SERVICE_IP-这样,如果主机出现故障,浮动IP将被重新分配-但不确定是否可以使用FLOATING_SERVICE_IP :: ...

D公开端口。 ...?

是否有“更好”的方法?


我尝试这样做:

每个docker host:

docker network create --config-only --subnet="<CIDR>" --ip-range="<CIDR>" -o parent="INTERFACE" "vlan_name_intermediate"


,然后是整个群的全局网络网络“ vlan_name”的服务,我可以从该vlan内部对其执行ping操作,但是IP是随机分配的,不是静态的。我尝试将其添加到组合yaml文件中:

docker network create -d macvlan --scope swarm --config-from "vlan_name_intermediate" "vlan_name"


其中ip在CIDR ip-range内,但设置被忽略

评论

为什么需要静态IP?这是第一个要解决的问题,如果没有迫切需要静态ip的问题,剩下的就是解决XY问题。

多个原因:(1)需要通过许可文件与设置为特定ip + port的其他旧版软件进行对话的旧版软件(并且我需要一次启用服务,以及(2)像dhcp / dns这样的全网服务网络中通过ip + port连接的其他服务通过api使用api(无主机名选项)。

然后,C是您唯一的选择(B只是在实际位置上添加另一台机器),但是您当然不应该首先尝试将这些服务转换为容器,而是朝着一条充满痛苦的技术之路前进它们不是为构建而来的,只是在主机和应用之间添加了一层而根本没有好处。

我的情况也一样,您找到了一个好的解决方案吗?

@eval不,我将一些服务移至了proxmox主机

#1 楼

在2016年6月30日,此问题在GitHub上创建,要求在docker-swarm服务上实现静态IP。

此后,添加了多个带有上下大拇指的答复。

在撰写本文时(2019年12月20日),此问题尚未解决,尚未实现。

讨论IP将永远在docker-swarm中实现。另一方面,不清楚为什么这个问题还没有解决。如果人们希望看到此功能已实现,则可以创建一个Pull请求或添加一个大拇指以增强意识。

#2 楼

您可能对这种更灵活的Docker Swarm替代品感兴趣:https://overnode.org/。您可以将其视为不带Swarm的多主机Docker组合,但还不止于此。它具有很多功能。它还支持静态IP地址。 (免责声明:我是该项目的作者)