docker service update
描述 | 更新服務 |
---|---|
用法 | docker service update [選項] 服務 |
Swarm 此命令適用於 Swarm 編排器。
描述
根據指定引數更新服務。引數與 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+ 不查詢登錄檔以解析映象摘要和支援的平臺 | |
--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-rm | API 1.25+ 移除秘密 | |
--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+ 分配偽 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 (格式: <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-job
或 global-job
,更新它的選項是有限的。
更新作業會立即停止任何正在進行的任務。該操作會為作業建立一組新任務,並有效地重置其完成狀態。如果在更新之前有任何任務正在執行,它們將被停止,並建立新任務。
作業不能進行部署或回滾。配置更新或回滾設定的任何標誌在作業模式下均無效。
要以與之前執行相同的引數再次執行作業,可以使用 --force
標誌強制更新它。