更新 Docker 服務

說明更新服務
用法docker service update [選項] 服務

Swarm 此指令適用於 Swarm Orchestrator。

說明

根據指定的參數更新服務。參數與 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 以上版本 不要查詢 registry 來解析映像檔摘要和支援的平台
--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條件符合時重新啟動 (noneon-failureany)
--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
--secret-rmAPI 1.25 以上版本 移除一個 secret
--stop-grace-period強制終止容器前的等待時間(奈秒|微秒|毫秒|秒|分鐘|小時)
--stop-signalAPI 1.28 以上版本 停止容器的訊號
--sysctl-addAPI 1.40 以上版本 新增或更新一個 Sysctl 選項
--sysctl-rmAPI 1.40 以上版本 移除一個 Sysctl 選項
-t, --ttyAPI 1.25 以上版本 分配一個虛擬終端 (pseudo-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(格式:<名稱|uid>[:<群組|gid>])
--with-registry-auth將 registry 驗證詳細資訊傳送給 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 手動啟動的回滾期間,都會遵守這些回滾參數。

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

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

以下範例新增名為 ssh-2 的 secret 並移除 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 旗標強制更新。