簡體   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