docker service update

描述更新服務
用法docker service update [選項] 服務

Swarm 此命令適用於 Swarm 編排器。

描述

根據指定引數更新服務。引數與 docker service create 相同。有關更多資訊,請參閱該處的說明。

通常,更新服務只會導致服務的任務被新任務替換,前提是服務的更改需要重新建立任務才能生效。例如,僅更改 --update-parallelism 設定不會重新建立任務,因為單個任務不受此設定的影響。但是,--force 標誌將導致任務無論如何都會重新建立。這可用於在不更改服務引數的情況下執行滾動重啟。

注意

這是一個叢集管理命令,必須在 Swarm 管理器節點上執行。要了解管理器和工作器,請參閱文件中的Swarm 模式部分

選項

選項預設值描述
--args服務命令引數
--cap-addAPI 1.41+ 新增 Linux 能力
--cap-dropAPI 1.41+ 移除 Linux 能力
--config-addAPI 1.30+ 在服務上新增或更新配置檔案
--config-rmAPI 1.30+ 移除配置檔案
--constraint-add新增或更新放置約束
--constraint-rm移除約束
--container-label-add新增或更新容器標籤
--container-label-rm按鍵移除容器標籤
--credential-specAPI 1.29+ 用於託管服務帳戶的憑據規範(僅限 Windows)
-d, --detachAPI 1.29+ 立即退出,而不等待服務收斂
--dns-addAPI 1.25+ 新增或更新自定義 DNS 伺服器
--dns-option-addAPI 1.25+ 新增或更新 DNS 選項
--dns-option-rmAPI 1.25+ 移除 DNS 選項
--dns-rmAPI 1.25+ 移除自定義 DNS 伺服器
--dns-search-addAPI 1.25+ 新增或更新自定義 DNS 搜尋域
--dns-search-rmAPI 1.25+ 移除 DNS 搜尋域
--endpoint-mode端點模式 (vip 或 dnsrr)
--entrypoint覆蓋映象的預設 ENTRYPOINT
--env-add新增或更新環境變數
--env-rm移除環境變數
--forceAPI 1.25+ 強制更新,即使沒有更改也需要
--generic-resource-add新增通用資源
--generic-resource-rm移除通用資源
--group-addAPI 1.25+ 向容器新增一個額外的補充使用者組
--group-rmAPI 1.25+ 從容器中移除先前新增的補充使用者組
--health-cmdAPI 1.25+ 執行以檢查健康狀況的命令
--health-intervalAPI 1.25+ 執行檢查之間的時間(毫秒|秒|分|小時)
--health-retriesAPI 1.25+ 需要連續失敗才能報告不健康
--health-start-intervalAPI 1.44+ 在啟動期間執行檢查之間的時間(毫秒|秒|分|小時)
--health-start-periodAPI 1.29+ 容器在計入不穩定重試之前初始化的啟動週期(毫秒|秒|分|小時)
--health-timeoutAPI 1.25+ 允許一次檢查執行的最長時間(毫秒|秒|分|小時)
--host-addAPI 1.32+ 新增自定義主機到 IP 對映 (host:ip)
--host-rmAPI 1.25+ 移除自定義主機到 IP 對映 (host:ip)
--hostnameAPI 1.25+ 容器主機名
--image服務映象標籤
--initAPI 1.37+ 在每個服務容器內使用 init 來轉發訊號和回收程序
--isolationAPI 1.35+ 服務容器隔離模式
--label-add新增或更新服務標籤
--label-rm按鍵移除標籤
--limit-cpu限制 CPU
--limit-memory限制記憶體
--limit-pidsAPI 1.41+ 限制最大程序數(預設 0 = 無限制)
--log-driver服務的日誌驅動
--log-opt日誌驅動選項
--max-concurrentAPI 1.41+ 同時執行的作業任務數(預設為 --replicas)
--mount-add在服務上新增或更新掛載點
--mount-rm按目標路徑移除掛載點
--network-addAPI 1.29+ 新增網路
--network-rmAPI 1.29+ 移除網路
--no-healthcheckAPI 1.25+ 停用任何容器指定的 HEALTHCHECK
--no-resolve-imageAPI 1.30+ 不查詢登錄檔以解析映象摘要和支援的平臺
--oom-score-adjAPI 1.46+ 調整主機的 OOM 首選項(-1000 到 1000)
--placement-pref-addAPI 1.28+ 新增放置偏好
--placement-pref-rmAPI 1.28+ 移除放置偏好
--publish-add新增或更新發布的埠
--publish-rm按目標埠移除釋出的埠
-q, --quiet禁止進度輸出
--read-onlyAPI 1.28+ 將容器的根檔案系統掛載為只讀
--replicas任務數量
--replicas-max-per-nodeAPI 1.40+ 每個節點的最大任務數(預設 0 = 無限制)
--reserve-cpu保留 CPU
--reserve-memory保留記憶體
--restart-condition滿足條件時重啟(none, on-failure, any
--restart-delay重啟嘗試之間的延遲(納秒|微秒|毫秒|秒|分|小時)
--restart-max-attempts放棄前最大重啟次數
--restart-window用於評估重啟策略的視窗(納秒|微秒|毫秒|秒|分|小時)
--rollbackAPI 1.25+ 回滾到之前的規範
--rollback-delayAPI 1.28+ 任務回滾之間的延遲(納秒|微秒|毫秒|秒|分|小時)
--rollback-failure-actionAPI 1.28+ 回滾失敗時的操作(pausecontinue
--rollback-max-failure-ratioAPI 1.28+ 回滾期間可容忍的失敗率
--rollback-monitorAPI 1.28+ 每個任務回滾後監控失敗的持續時間(納秒|微秒|毫秒|秒|分|小時)
--rollback-orderAPI 1.29+ 回滾順序(start-firststop-first
--rollback-parallelismAPI 1.28+ 同時回滾的最大任務數(0 表示一次性回滾所有)
--secret-addAPI 1.25+ 在服務上新增或更新秘密
--secret-rmAPI 1.25+ 移除秘密
--stop-grace-period強制停止容器前等待的時間(納秒|微秒|毫秒|秒|分|小時)
--stop-signalAPI 1.28+ 停止容器的訊號
--sysctl-addAPI 1.40+ 新增或更新 Sysctl 選項
--sysctl-rmAPI 1.40+ 移除 Sysctl 選項
-t, --ttyAPI 1.25+ 分配偽 TTY
--ulimit-addAPI 1.41+ 新增或更新 ulimit 選項
--ulimit-rmAPI 1.41+ 移除 ulimit 選項
--update-delay更新之間的延遲(納秒|微秒|毫秒|秒|分|小時)
--update-failure-action更新失敗時的操作(pausecontinuerollback
--update-max-failure-ratioAPI 1.25+ 更新期間可容忍的失敗率
--update-monitorAPI 1.25+ 每個任務更新後監控失敗的持續時間(納秒|微秒|毫秒|秒|分|小時)
--update-orderAPI 1.29+ 更新順序(start-firststop-first
--update-parallelism同時更新的最大任務數(0 表示一次性更新所有)
-u, --user使用者名稱或 UID (格式: <name|uid>[:<group|gid>])
--with-registry-auth將登錄檔身份驗證詳細資訊傳送到 Swarm 代理
-w, --workdir容器內的工作目錄

示例

更新服務

$ docker service update --limit-cpu 2 redis

在不更改引數的情況下執行滾動重啟

$ docker service update --force --update-parallelism 1 --update-delay 30s redis

在此示例中,--force 標誌導致服務任務被關閉並替換為新任務,即使其他任何引數通常都不會導致這種情況發生。--update-parallelism 1 設定確保一次只替換一個任務(這是預設行為)。--update-delay 30s 設定在任務之間引入 30 秒的延遲,以便滾動重啟逐漸進行。

新增或移除掛載(--mount-add, --mount-rm)

使用 --mount-add--mount-rm 選項新增或移除服務的繫結掛載或卷。

以下示例建立一個服務,將 test-data 卷掛載到 /somewhere。下一步更新服務,將 other-volume 卷也掛載到 /somewhere-else 卷。最後一步解除安裝 /somewhere 掛載點,從而有效地移除 test-data 卷。每個命令都返回服務名稱。

  • --mount-add 標誌接受與 service create 命令的 --mount 標誌相同的引數。有關詳細資訊,請參閱 service create 參考中的卷和繫結掛載部分。

  • --mount-rm 標誌接受掛載的 target 路徑。

$ docker service create \
    --name=myservice \
    --mount type=volume,source=test-data,target=/somewhere \
    nginx:alpine

myservice

$ docker service update \
    --mount-add type=volume,source=other-volume,target=/somewhere-else \
    myservice

myservice

$ docker service update --mount-rm /somewhere myservice

myservice

新增或移除已釋出的服務埠(--publish-add, --publish-rm)

使用 --publish-add--publish-rm 標誌新增或移除服務的已釋出埠。您可以使用 docker service create 參考中討論的短或長語法。

以下示例將已釋出的服務埠新增到現有服務。

$ docker service update \
  --publish-add published=8080,target=80 \
  myservice

新增或移除網路(--network-add, --network-rm)

使用 --network-add--network-rm 標誌為服務新增或移除網路。您可以使用 docker service create 參考中討論的短或長語法。

以下示例為已連線到網路 my-network 的現有服務新增一個新的別名

$ docker service update \
  --network-rm my-network \
  --network-add name=my-network,alias=web1 \
  myservice

回滾到服務的上一個版本(--rollback)

使用 --rollback 選項回滾到服務的上一個版本。

這會將服務恢復到最近一次 docker service update 命令之前的配置。

以下示例將服務的副本數從 4 更新到 5,然後回滾到以前的配置。

$ docker service update --replicas=5 web

web

$ docker service ls

ID            NAME  MODE        REPLICAS  IMAGE
80bvrzp6vxf3  web   replicated  0/5       nginx:alpine

以下示例回滾 web 服務

$ docker service update --rollback web

web

$ docker service ls

ID            NAME  MODE        REPLICAS  IMAGE
80bvrzp6vxf3  web   replicated  0/4       nginx:alpine

其他選項也可以與 --rollback 結合使用,例如,--update-delay 0s 以在任務之間不延遲地執行回滾

$ docker service update \
  --rollback \
  --update-delay 0s
  web

web

服務還可以設定為在更新失敗時自動回滾到以前的版本。要設定服務進行自動回滾,請使用 --update-failure-action=rollback。如果未能成功更新的任務比例超過 --update-max-failure-ratio 給定的值,將觸發回滾。

回滾操作的速率、並行度和其他引數由以下標誌傳遞的值決定

  • --rollback-delay
  • --rollback-failure-action
  • --rollback-max-failure-ratio
  • --rollback-monitor
  • --rollback-parallelism

例如,一個設定為 --update-parallelism 1 --rollback-parallelism 3 的服務將在正常更新期間一次更新一個任務,但在回滾期間,一次將回滾 3 個任務。這些回滾引數在自動回滾和使用 --rollback 手動啟動的回滾期間都得到遵守。

新增或移除秘密(--secret-add, --secret-rm)

使用 --secret-add--secret-rm 選項新增或移除服務的秘密。

以下示例新增一個名為 ssh-2 的秘密並移除 ssh-1

$ docker service update \
    --secret-add source=ssh-2,target=ssh-2 \
    --secret-rm ssh-1 \
    myservice

使用模板更新服務

service update 的某些標誌支援使用模板。請參閱 service create 獲取參考。

在 Windows 上指定隔離模式(--isolation)

service update 支援與 service create 相同的 --isolation 標誌。請參閱 service create 獲取參考。

更新作業

當服務作為作業建立時,透過在 service create 時將其模式設定為 replicated-jobglobal-job,更新它的選項是有限的。

更新作業會立即停止任何正在進行的任務。該操作會為作業建立一組新任務,並有效地重置其完成狀態。如果在更新之前有任何任務正在執行,它們將被停止,並建立新任務。

作業不能進行部署或回滾。配置更新或回滾設定的任何標誌在作業模式下均無效。

要以與之前執行相同的引數再次執行作業,可以使用 --force 標誌強制更新它。