更新 Docker 服務
說明 | 更新服務 |
---|---|
用法 | docker service update [選項] 服務 |
Swarm 此指令適用於 Swarm Orchestrator。
說明
根據指定的參數更新服務。參數與 docker service create
相同。詳情請參閱該處的說明。
通常,更新服務只會在服務變更需要重新建立任務才能生效時,才會導致服務的任務被新的任務取代。例如,僅變更 --update-parallelism
設定不會重新建立任務,因為個別任務不受此設定影響。但是,--force
旗標會強制重新建立任務。這可以用於在不變更服務參數的情況下執行滾動重新啟動。
**注意**
這是一個叢集管理指令,必須在 Swarm 管理節點上執行。如需瞭解管理節點和工作節點,請參閱文件中Swarm 模式章節。
選項
選項 | 預設值 | 說明 |
---|---|---|
--args | 服務指令參數 | |
--cap-add | API 1.41+ 新增 Linux 功能 | |
--cap-drop | API 1.41+ 捨棄 Linux 功能 | |
--config-add | API 1.30 以上版本 新增或更新服務的設定檔 | |
--config-rm | API 1.30 以上版本 移除設定檔 | |
--constraint-add | 新增或更新佈署限制 | |
--constraint-rm | 移除限制 | |
--container-label-add | 新增或更新容器標籤 | |
--container-label-rm | 根據鍵值移除容器標籤 | |
--credential-spec | API 1.29 以上版本 受管服務帳戶的憑證規格 (僅限 Windows) | |
-d, --detach | API 1.29 以上版本 立即退出,不等待服務收斂 | |
--dns-add | API 1.25 以上版本 新增或更新自訂 DNS 伺服器 | |
--dns-option-add | API 1.25 以上版本 新增或更新 DNS 選項 | |
--dns-option-rm | API 1.25 以上版本 移除 DNS 選項 | |
--dns-rm | API 1.25 以上版本 移除自訂 DNS 伺服器 | |
--dns-search-add | API 1.25 以上版本 新增或更新自訂 DNS 搜尋網域 | |
--dns-search-rm | API 1.25 以上版本 移除 DNS 搜尋網域 | |
--endpoint-mode | 端點模式 (vip 或 dnsrr) | |
--entrypoint | 覆寫映像檔的預設 ENTRYPOINT | |
--env-add | 新增或更新環境變數 | |
--env-rm | 移除環境變數 | |
--force | API 1.25 以上版本 即使沒有變更也強制更新 | |
--generic-resource-add | 新增通用資源 | |
--generic-resource-rm | 移除通用資源 | |
--group-add | API 1.25 以上版本 新增額外的補充使用者群組到容器 | |
--group-rm | API 1.25 以上版本 從容器中移除先前新增的補充使用者群組 | |
--health-cmd | API 1.25 以上版本 檢查健康狀態的執行指令 | |
--health-interval | API 1.25 以上版本 執行檢查的間隔時間 (毫秒|秒|分|小時) | |
--health-retries | API 1.25 以上版本 回報不健康狀態所需的連續失敗次數 | |
--health-start-interval | API 1.44 以上版本 啟動期間執行檢查的間隔時間 (毫秒|秒|分|小時) | |
--health-start-period | API 1.29 以上版本 容器初始化前的啟動期間,在此期間重試次數不計入不穩定狀態 (毫秒|秒|分|小時) | |
--health-timeout | API 1.25 以上版本 允許單次檢查執行的最長時間 (毫秒|秒|分|小時) | |
--host-add | API 1.32 以上版本 新增自訂主機到 IP 的映射 (host:ip ) | |
--host-rm | API 1.25 以上版本 移除自訂主機到 IP 的映射 (host:ip ) | |
--hostname | API 1.25 以上版本 容器主機名稱 | |
--image | 服務映像檔標籤 | |
--init | API 1.37 以上版本 在每個服務容器內使用 init 來轉發訊號並回收行程 | |
--isolation | API 1.35 以上版本 服務容器隔離模式 | |
--label-add | 新增或更新服務標籤 | |
--label-rm | 根據鍵值移除標籤 | |
--limit-cpu | 限制 CPU | |
--limit-memory | 限制記憶體 | |
--limit-pids | API 1.41 以上版本 限制最大行程數 (預設 0 = 無限制) | |
--log-driver | 服務的記錄驅動程式 | |
--log-opt | 記錄驅動程式選項 | |
--max-concurrent | API 1.41 以上版本 同時執行的作業任務數 (預設等於 --replicas) | |
--mount-add | 新增或更新服務的掛載 | |
--mount-rm | 根據目標路徑移除掛載 | |
--network-add | API 1.29 以上版本 新增網路 | |
--network-rm | API 1.29 以上版本 移除網路 | |
--no-healthcheck | API 1.25 以上版本停用任何容器指定的 HEALTHCHECK | |
--no-resolve-image | API 1.30 以上版本 不要查詢 registry 來解析映像檔摘要和支援的平台 | |
--oom-score-adj | API 1.46 以上版本 調整主機的 OOM 偏好設定 (-1000 到 1000) | |
--placement-pref-add | API 1.28 以上版本 新增佈署偏好設定 | |
--placement-pref-rm | API 1.28 以上版本 移除佈署偏好設定 | |
--publish-add | 新增或更新已發佈的連接埠 | |
--publish-rm | 根據目標連接埠移除已發佈的連接埠 | |
-q, --quiet | 隱藏進度輸出 | |
--read-only | API 1.28 以上版本 將容器的根檔案系統掛載為唯讀 | |
--replicas | 任務數量 | |
--replicas-max-per-node | API 1.40 以上版本 每個節點的最大任務數 (預設 0 = 無限制) | |
--reserve-cpu | 保留 CPU | |
--reserve-memory | 保留記憶體 | |
--restart-condition | 條件符合時重新啟動 (none 、on-failure 、any ) | |
--restart-delay | 重新啟動嘗試之間的延遲 (奈秒|微秒|毫秒|秒|分|小時) | |
--restart-max-attempts | 放棄前的最大重新啟動次數 | |
--restart-window | 用於評估重新啟動策略的視窗 (奈秒|微秒|毫秒|秒|分|小時) | |
--rollback | API 1.25 以上版本 回復到先前的規格 | |
--rollback-delay | API 1.28 以上版本 任務回滾之間的延遲 (奈秒|微秒|毫秒|秒|分|小時) | |
--rollback-failure-action | API 1.28 以上版本 回滾失敗時的動作 (pause 、continue ) | |
--rollback-max-failure-ratio | API 1.28 以上版本 回滾期間可容忍的失敗率 | |
--rollback-monitor | API 1.28 以上版本 每個任務回滾後監控失敗的持續時間(奈秒|微秒|毫秒|秒|分鐘|小時) | |
--rollback-order | API 1.29 以上版本 回滾順序 (start-first ,stop-first ) | |
--rollback-parallelism | API 1.28 以上版本 同時回滾的最大任務數(0 表示一次全部回滾) | |
--secret-add | API 1.25 以上版本 在服務上新增或更新一個 secret | |
--secret-rm | API 1.25 以上版本 移除一個 secret | |
--stop-grace-period | 強制終止容器前的等待時間(奈秒|微秒|毫秒|秒|分鐘|小時) | |
--stop-signal | API 1.28 以上版本 停止容器的訊號 | |
--sysctl-add | API 1.40 以上版本 新增或更新一個 Sysctl 選項 | |
--sysctl-rm | API 1.40 以上版本 移除一個 Sysctl 選項 | |
-t, --tty | API 1.25 以上版本 分配一個虛擬終端 (pseudo-TTY) | |
--ulimit-add | API 1.41 以上版本 新增或更新一個 ulimit 選項 | |
--ulimit-rm | API 1.41 以上版本 移除一個 ulimit 選項 | |
--update-delay | 更新之間的延遲(奈秒|微秒|毫秒|秒|分鐘|小時) | |
--update-failure-action | 更新失敗時的動作 (pause 、continue 、rollback ) | |
--update-max-failure-ratio | API 1.25 以上版本 更新期間可容忍的失敗率 | |
--update-monitor | API 1.25 以上版本 每個任務更新後監控失敗的持續時間(奈秒|微秒|毫秒|秒|分鐘|小時) | |
--update-order | API 1.29 以上版本 更新順序 (start-first ,stop-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-job
或 global-job
,則更新選項會受到限制。
更新作業會立即停止任何正在進行中的任務。此操作會為該作業建立一組新的任務,並且實際上會重設其完成狀態。如果在更新之前有任何任務正在執行,則會將它們停止,並建立新的任務。
作業無法進行滾動更新或回滾。用於設定更新或回滾設定的任何旗標在作業模式下均無效。
若要使用先前執行的相同參數再次執行作業,可以使用 --force
旗標強制更新。