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