我正在尝试实施一个备份系统。该系统要求在特定节点上进行备份时执行docker容器。不幸的是,我无法使其在所需的节点上执行。
这是我正在docker swarm Manager节点上使用并执行的命令。它在群集管理器节点上创建容器,而不是在约束中指定的容器。我想念什么?
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
答案 0 :(得分:2)
您使用的是较旧的经典Swarm方法来尝试运行容器,但几乎可以肯定是使用Swarm Mode。如果您在docker swarm init
上安装了群集,并且可以在管理器上看到docker node ls
上的节点,那么就是这种情况。
Classic Swarm作为容器运行,实际上是多个Docker引擎的反向代理,拦截了对docker run
之类的命令的调用,并将其发送到适当的节点。通常建议避免使用较旧的群集实现,除非您有特定的用例,并花时间在每个Docker主机上配置mTLS。
集群模式提供了一个使用Raft进行仲裁的HA管理器(与etcd相同),处理所有管理请求的加密,配置覆盖网络,并使用声明性模型工作,给出目标状态,而不是命令性命令来运行。它与经典的Swarm完全不同。值得注意的是,虫群模式仅适用于服务和堆栈,并且完全忽略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
请注意,工作组在Swarm模式下还没有得到很好的支持(存在一个开放性问题,寻求社区对此功能的反馈)。当前,它专注于运行持久性服务,除非出现错误,否则这些服务通常不会退出。如果希望您的命令退出,则可以包含诸如--restart-max-attempts 0
之类的选项,以防止群模式重新启动它。如果网络不属于群集范围,则可能还需要执行其他工作。
我还建议将其转换为docker-compose.yml
文件并与docker stack deploy
一起部署,以更好地将服务记录为配置文件。