Bash 更新服务约束

Bash 更新服务约束,bash,docker,swarm,Bash,Docker,Swarm,我安装了两台服务器,一台是生产服务器,名为prod,另一台是暂存服务器,名为staging。两台服务器都在同一个Docker swarm中。 我想编写bash脚本,将一个DockerSwarm服务从生产服务器移动到临时服务器。 我已经创建了这两个bash脚本,我正在节点管理器中运行 #/usr/bin/env bash #将_service_移至_prod.sh /usr/bin/docker服务更新\ --约束rm“node.hostname==staging”\ --约束rm“node.ho

我安装了两台服务器,一台是生产服务器,名为
prod
,另一台是暂存服务器,名为
staging
。两台服务器都在同一个Docker swarm中。 我想编写bash脚本,将一个DockerSwarm服务从生产服务器移动到临时服务器。 我已经创建了这两个bash脚本,我正在节点管理器中运行

#/usr/bin/env bash
#将_service_移至_prod.sh
/usr/bin/docker服务更新\
--约束rm“node.hostname==staging”\
--约束rm“node.hostname==prod”\
--约束添加“node.hostname==prod”\
一些服务
#/usr/bin/env bash
#将_服务_移动到_staging.sh
/usr/bin/docker服务更新\
--约束rm“node.hostname==staging”\
--约束rm“node.hostname==prod”\
--约束添加“node.hostname==staging”\
一些服务
正如您所看到的,该脚本删除了所有约束,然后添加新约束。 当我启动第一个脚本时,它有时会为服务创建两个prod约束。 如“docker inspect some_service”的输出

  "Placement": {
    "Constraints": [
      "node.hostname==staging",
      "node.hostname==staging"
    ],
有时它不起作用,-服务仍在临时计算机上运行。 如果没有更多的环境(如staging1、staging2等),代码 会大得多


是否有可靠的bash oneliner来删除所有约束并为服务添加适当的约束?

您好,我怀疑您是按名称引用服务,可能与一个或多个服务id匹配。。我建议改为通过id查询服务。。(参见docker service ls)我记得有一个问题,我在swarm中添加了新节点,docker守护进程无法将服务容器均匀地分布在整个swarm网络中,从而有效地利用新添加的节点。你能在应用约束规则后键入
docker服务更新--force
,检查它是否正常工作吗?如果有,我会创建一个答案。谢谢你的建议,7_R3X,但不幸的是,它对我不起作用,同样的混乱和重复的约束