繁体   English   中英

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

[英]Run docker container on a specific node in the swarm cluster

我正在尝试实施备份系统。 该系统需要在特定节点上备份时执行 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

您正在使用较旧的经典 Swarm 方法来尝试运行您的容器,但几乎可以肯定使用的是 Swarm 模式。 如果您使用docker swarm init安装了您的 swarm,并且可以在管理器上看到带有docker node ls的节点,那么就是这种情况。

Classic Swarm 作为一个容器运行,实际上是多个 docker 引擎的反向代理,拦截对docker run等命令的调用并将它们发送到适当的节点。 除非您有特定的用例并花时间在每个 docker 主机上配置 mTLS,否则通常建议避免使用这种较旧的 swarm 实现。

Swarm Mode 提供了一个使用 Raft 进行仲裁的 HA 管理器(与 etcd 相同),处理所有管理请求的加密,配置覆盖网络,并与声明性 model 一起使用,提供目标 state,而不是运行命令。 这是与经典 Swarm 非常不同的 model。 值得注意的是,Swarm Mode 仅适用于服务和堆栈,完全忽略了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的选项,以防止 swarm 模式重新启动它。 如果网络不是 swarm 作用域,您可能还需要做额外的工作。

我还建议将其转换为docker-compose.yml文件并使用docker stack deploy进行部署,以更好地将服务记录为配置文件。

您正在使用Docker run ,它将在您运行命令的节点上启动容器。 run 命令不会创建服务。 使用docker servicedocker stack命令。

我还将使用命令行选项: --constraint node.hostname=storageBeta而不是设置环境。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM