我在尝试实现一个备份系统。此系统需要在特定节点上进行备份时执行码头容器。不幸的是,我无法让它在所需的节点上执行。
这是我在码头群管理器节点上使用和执行的命令。它在群集管理器节点上创建容器,而不是在约束中指定的容器。我遗漏了什么?
docker run --rm -it --network cluster_02 -v "/var/lib:/srv/toBackup" \
-e BACKUPS_TO_KEEP="5" \
-e S3_BUCKET="backup" \
-e S3_ACCESS_KEY="" \
-e S3_SECRET_KEY="" \
-e constraint:node.hostname==storageBeta \
comp/backup create $BACKUP_NAME发布于 2019-11-08 01:41:28
您正在使用一种较旧的经典群集方法来尝试运行您的容器,但几乎可以肯定地使用了Swarm。如果您用docker swarm init安装了群集,并且可以在管理器上看到带有docker node ls的节点,那么情况就是这样。
经典的Swarm作为一个容器运行,它实际上是多个坞引擎的反向代理,拦截对命令(如docker run )的调用,并将它们发送到相应的节点。通常建议避免这种旧的群集实现,除非您有一个特定的用例,并且花时间在每个停靠主机上配置mTLS。
S群模式提供HA管理器,使用Raft进行仲裁(与etcd相同),处理所有管理请求的加密,配置覆盖网络,并使用声明式模型,给出目标状态,而不是命令命令来运行。这是一个非常不同的模式,与经典的斯温。值得注意的是,群集模式只在服务和堆栈上工作,并且完全忽略docker run和其他本地命令,例如:
docker service create \
--name backup \
--constraint node.hostname==storageBeta \
--network cluster_02 \
-v "/var/lib:/srv/toBackup" \
-e BACKUPS_TO_KEEP="5" \
-e S3_BUCKET="backup" \
-e S3_ACCESS_KEY="" \
-e S3_SECRET_KEY="" \
comp/backup create $BACKUP_NAME请注意,在群集模式中,作业还没有得到很好的支持(有一个有待解决的问题,需要社区对包含此功能的反馈意见)。目前,它的重点是运行通常不退出的持久性服务,除非出现错误。如果您的命令被期望退出,您可以包括一个类似--restart-max-attempts 0的选项,以防止群集模式重新启动它。如果网络不限定范围,您还可能需要做额外的工作。
我还建议将其转换为docker-compose.yml文件,并与docker stack deploy一起部署,以便更好地将服务文档化为配置文件。
https://stackoverflow.com/questions/58749489
复制相似问题