在群集集群中的特定节点上运行docker容器

我正在尝试实施一个备份系统。该系统要求在特定节点上进行备份时执行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
deitysix 回答:在群集集群中的特定节点上运行docker容器

您使用的是较旧的经典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一起部署,以更好地将服务记录为配置文件。

本文链接:https://www.f2er.com/3144612.html

大家都在问