我设置了两台服务器,其中一台名为prod
,一台为staging
。两台服务器都在同一个Docker群中。
我想编写bash脚本,以将一个docker swarm服务从生产移动到登台服务器。
我已经在节点管理器中运行了这2个bash脚本。
#!/usr/bin/env bash
# move_service_to_prod.sh
/usr/bin/docker service update \
--constraint-rm "node.hostname==staging" \
--constraint-rm "node.hostname==prod" \
--constraint-add "node.hostname==prod" \
some_service
#!/usr/bin/env bash
# move_service_to_staging.sh
/usr/bin/docker service update \
--constraint-rm "node.hostname==staging" \
--constraint-rm "node.hostname==prod" \
--constraint-add "node.hostname==staging" \
some_service
如您所见,脚本删除了所有约束,然后添加了新约束。 当我启动第一个脚本时,有时会为服务创建2个prod约束。 就像“ docker inspect some_service”的输出一样
"Placement": {
"Constraints": [
"node.hostname==staging",
"node.hostname==staging"
],
有时无法正常工作-服务仍在登台计算机上运行。 如果将再有几个环境(例如staging1,staging2等),请编写代码 会更大。
是否有可靠的bash oneliner来消除所有限制并添加适当的服务限制?