Docker Engine 19.03 版本說明

19.03.15

2021-02-01

安全性

  • CVE-2021-21285 防止無效映像檔使 Docker 守護程式崩潰
  • CVE-2021-21284 鎖定檔案權限,防止重新映射的根使用者存取 Docker 狀態
  • 確保使用 BuildKit 建置時,AppArmor 和 SELinux 設定檔已套用

用戶端

  • 在匯入上下文之前檢查,以降低解壓縮檔案逸出上下文儲存的風險

19.03.14

2020-12-01

安全性

建置器

  • AppArmor 的 Beta 版本現在能正確解析,防止建置失敗 moby/moby#41542

網路

執行時期

無根模式

  • 鎖定狀態目錄,防止 systemd-tmpfiles 自動清理 moby/moby#41635
  • dockerd-rootless.sh:支援新的 containerd shim socket 路徑慣例 moby/moby#41557

日誌記錄

19.03.13

2020-09-16

建置器

  • buildkit:修正快取邏輯中的 nil 解引用錯誤 moby/moby#41279
  • buildkit:在 COPY/ADD 期間將 Unix socket 視為常規檔案 moby/moby#41269
  • buildkit:在計算中忽略系統和安全性 xattrs,以確保無論 SELinux 環境如何,COPY 快取都保持一致 moby/moby#41222
  • buildkit:使 `--cache-from` 行為更可靠 moby/moby#41222
  • buildkit:修正匯出快取時導致 CPU 過載的無限迴圈錯誤 moby/moby#41185

用戶端

網路

無根模式

執行時期

Windows

  • 修正使用 servercore 映像檔時 Windows 容器啟動時間緩慢的問題 moby/moby#41192

19.03.12

2020-06-18

用戶端

  • 修正使用多個設定檔(例如使用 Docker Desktop 時的 Windows 與 WSL2)時無法從註冊表登出的錯誤 docker/cli#2592
  • 修正阻止讀取上下文中繼資料的迴歸錯誤 docker/cli#2586
  • 將 Golang 升級至 1.13.12 docker/cli#2575

網路

執行時期

19.03.11

2020-06-01

網路

停用 IPv6 路由器公告,防止位址欺騙。 CVE-2020-13401

描述

在 Docker 的預設配置中,容器網路介面是連接到主機的虛擬乙太網路連結(veth 介面)。在此配置下,攻擊者能夠在容器中以 root 身份執行進程,並使用 `CAP_NET_RAW` 能力(存在於預設配置中)向主機發送和接收任意封包。

如果主機上未完全禁用 IPv6(通過核心 cmdline 上的 `ipv6.disable=1`),則它將在某些介面上未配置或已配置,但 IPv6 轉發很可能被禁用,即 `/proc/sys/net/ipv6/conf//forwarding == 0`。此外,預設情況下,`/proc/sys/net/ipv6/conf//accept_ra == 1`。這兩個 sysctl 的組合意味著主機接受路由器公告並使用它們配置 IPv6 堆疊。

通過從容器發送「惡意」路由器公告,攻擊者可以重新配置主機,將主機的部分或所有 IPv6 流量重定向到攻擊者控制的容器。

即使之前沒有 IPv6 流量,如果 DNS 返回 A (IPv4) 和 AAAA (IPv6) 記錄,許多 HTTP 函式庫會嘗試先通過 IPv6 連接,然後回退到 IPv4,這給了攻擊者回應的機會。如果主機碰巧存在像去年 apt 中的 RCE 漏洞(CVE-2019-3462),攻擊者現在可以升級到主機。

由於 Docker 容器預設不包含 `CAP_NET_ADMIN`,攻擊者無法配置他們想要進行中間人攻擊的 IP,他們無法使用 iptables 來進行 NAT 或重定向流量,也無法使用 `IP_TRANSPARENT`。但是,攻擊者仍然可以使用 `CAP_NET_RAW` 並在使用者空間中實作 tcp/ip 堆疊。

有關相關問題,請參閱 kubernetes/kubernetes#91507

19.03.10

2020-05-29

用戶端

網路

執行時期

  • 通過將 Go 升級到 1.13.11,避免 s390x 上可能發生的恐慌錯誤。 moby/moby#40978

打包

19.03.9

2020-05-14

建置器

  • buildkit:修正並行建置多個映像檔時併發 map 寫入的恐慌錯誤。 moby/moby#40780
  • buildkit:修正使用使用者命名空間時,在不同階段之間無法變更非 root 擁有檔案的所有權問題。 moby/moby#40955
  • 避免在 Windows 上創建不相關的暫存檔。 moby/moby#40877

用戶端

日誌記錄

  • 避免因關閉已關閉的日誌檔而導致容器日誌無法輪轉的情況。 moby/moby#40921

網路

執行時期

無根模式

  • 現在 rootlesskit-docker-proxy 在暴露特權埠時會返回詳細的錯誤訊息。 moby/moby#40863
  • 支援 /etc/subuid 和 /etc/subgid 中的數字 ID。 moby/moby#40951

安全性

  • apparmor:為使用者命名空間添加缺失的規則。 moby/moby#40564
  • SELinux:修正重新標記時無法檢測到 ENOTSUP 錯誤。 moby/moby#40946

Swarm

19.03.8

2020-03-10

執行時期

19.03.7

2020-03-03

建置器

執行時期

用戶端

19.03.6

2020-02-12

建置器

網路

執行時期

19.03.5

2019-11-14

建置器

  • builder-next:在建置器設定中添加了 `entitlements`。 docker/engine#412
  • 修正 builder-next:使用使用者命名空間重映射時,使用建置密鑰或 SSH 轉發的權限錯誤。 docker/engine#420
  • 修正 builder-next:將符號連結複製到已複製目錄中的問題。 docker/engine#420

打包

  • 支援 RHEL 8 套件

執行時期

19.03.4

2019-10-17

網路

  • 回滾 libnetwork 變更以修正 `DOCKER-USER` iptables 鏈問題。 docker/engine#404

已知問題

現有問題

  • 在某些大型叢集的情況下,Docker 資訊在 Swarm 部分可能會包含錯誤 `code = ResourceExhausted desc = grpc: received message larger than max (5351376 vs. 4194304)`。這不表示使用者有任何故障或錯誤配置,也無需回應。
  • 當重新部署所有服務時,可能會發生協調器埠衝突。由於在短時間內有許多 Swarm 管理員請求,某些服務無法接收流量,並在部署後導致 `404` 錯誤。
    • 解決方法:通過 `docker service update --force` 重新啟動所有任務。
  • CVE-2018-15664 符號連結交換攻擊,帶目錄遍歷。在即將發布的修補版本中提供適當修正之前,暫時解決方法是:在執行檔案操作之前 `docker pause` 容器。 moby/moby#39252
  • 由於 CVE 緩解措施導致 `docker cp` 迴歸。當 `docker cp` 的來源設定為 `/` 時會產生錯誤。

19.03.3

2019-10-08

安全性

建置器

  • 修正 builder-next:修正第三方註冊表的摘要解析問題。 docker/engine#339

  • 修正 builder-next:修正守護程式通過 socket 啟動時的使用者命名空間建置問題。 docker/engine#373

  • 修正 builder-next;會話:每個連線釋放轉發的 SSH socket 連線。 docker/engine#373

  • 修正 build-next:llbsolver:多個快取匯入器錯誤。 docker/engine#373

用戶端

  • 添加了對 Docker Template 0.1.6 的支援。

  • 緩解具有過多別名的 YAML 檔案問題。 docker/cli#2119

執行時期

  • 將 Golang 升級至 1.12.10。 docker/engine#387

  • 將 containerd 升級至 1.2.10。 docker/engine#385

  • 分發:拉取 v2 schema1 清單時修改警告邏輯。 docker/engine#368

  • 修正提供不正確的平台選項時 `POST /images/create` 返回 500 狀態碼的問題。 docker/engine#365

  • 修正提供不正確的平台選項時 `POST /build` 返回 500 狀態碼的問題。 docker/engine#365

  • 修正由結構成員未對齊導致的 32 位 ARMv7 恐慌錯誤。 docker/engine#363

  • 修正連結到不存在的容器時返回「無效參數」的問題。 docker/engine#352

  • 修正 overlay2:使用核心版本 >= 5.2 時在掛載時出現忙碌錯誤的問題。 docker/engine#332

  • 修正 `docker rmi` 在某些配置錯誤的系統(例如死掉的 NFS 共用)中卡住的問題。 docker/engine#335

  • 修正處理執行進程的阻塞 I/O 問題。 docker/engine#296

  • 修正 jsonfile 記錄器:當設定 `max-size` 且 `max-file=1` 時,日誌追蹤卡住的問題。 docker/engine#378

已知問題

新增功能

  • `DOCKER-USER` iptables 鏈缺失:docker/for-linux#810。使用者無法在此 iptables 鏈之上執行額外的容器網路流量過濾。如果您沒有在 `DOCKER-USER` 之上自訂 iptables 鏈,則不會受到此問題影響。
    • 解決方法:在 Docker 守護程式啟動後插入 iptables 鏈。例如
      iptables -N DOCKER-USER
      iptables -I FORWARD -j DOCKER-USER
      iptables -A DOCKER-USER -j RETURN

現有問題

  • 在某些大型叢集的情況下,Docker 資訊在 Swarm 部分可能會包含錯誤 `code = ResourceExhausted desc = grpc: received message larger than max (5351376 vs. 4194304)`。這不表示使用者有任何故障或錯誤配置,也無需回應。
  • 當重新部署所有服務時,可能會發生協調器埠衝突。由於在短時間內有許多 Swarm 管理員請求,某些服務無法接收流量,並在部署後導致 `404` 錯誤。
    • 解決方法:通過 `docker service update --force` 重新啟動所有任務。
  • CVE-2018-15664 符號連結交換攻擊,帶目錄遍歷。在即將發布的修補版本中提供適當修正之前,暫時解決方法是:在執行檔案操作之前 `docker pause` 容器。 moby/moby#39252
  • 由於 CVE 緩解措施導致 `docker cp` 迴歸。當 `docker cp` 的來源設定為 `/` 時會產生錯誤。

19.03.2

2019-09-03

建置器

  • 修正 Windows 上 `COPY --from` 到不存在目錄的問題。 moby/moby#39695

  • 修正 builder-next:歷史記錄中中繼資料命令沒有建立時間的問題。 moby/moby#39456

  • 修正 builder-next:修正層匯出錯誤時關閉進度。 moby/moby#39782

  • 將 buildkit 更新至 588c73e1e4。 moby/moby#39781

用戶端

  • 修正非 Windows 系統上 Windows 絕對路徑檢測的問題 docker/cli#1990

  • 修正 `docker login --username` 的 zsh 自動補齊腳本。

  • 修正上下文:在 `context create` 上產生一致的輸出。 docker/cli#1985

  • 修正對 HTTP 代理環境變數的支援。 docker/cli#2059

日誌記錄

網路

  • 防止網路連接到已禁用網路的容器時發生恐慌。 moby/moby#39589

執行時期

  • 將 Golang 升級至 1.12.8。

  • 修正為容器使用 XFS 磁碟配額時可能發生的引擎恐慌。 moby/moby#39644

Swarm

已知問題

  • 在某些大型叢集的情況下,Docker 資訊在 Swarm 部分可能會包含錯誤 `code = ResourceExhausted desc = grpc: received message larger than max (5351376 vs. 4194304)`。這不表示使用者有任何故障或錯誤配置,也無需回應。

  • 當重新部署所有服務時,可能會發生協調器埠衝突。由於在短時間內有許多 Swarm 管理員請求,某些服務無法接收流量,並在部署後導致 `404` 錯誤。

    • 解決方法:通過 `docker service update --force` 重新啟動所有任務。
  • 由於 FORWARD 鏈中缺少 Iptables 規則,流量無法從主機流出。缺失的規則為

    /sbin/iptables --wait -C FORWARD -o docker_gwbridge -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    /sbin/iptables --wait -C FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    • 解決方法:使用腳本和 cron 定義將這些規則添加回來。腳本必須包含 '-C' 命令來檢查規則是否存在,並包含 '-A' 命令來添加規則。定期運行該腳本,例如每分鐘。
    • 受影響版本:18.09.1, 19.03.0
  • CVE-2018-15664 符號連結交換攻擊,帶目錄遍歷。在即將發布的修補版本中提供適當修正之前,暫時解決方法是:在執行檔案操作之前 `docker pause` 容器。 moby/moby#39252

  • 由於 CVE 緩解措施導致 `docker cp` 迴歸。當 `docker cp` 的來源設定為 `/` 時會產生錯誤。

19.03.1

2019-07-25

安全性

  • 修正了在 Glibc 下 chroot 內部載入基於 nsswitch 的配置問題。 CVE-2019-14271

已知問題

  • 在某些大型叢集的情況下,Docker 資訊在 Swarm 部分可能會包含錯誤 `code = ResourceExhausted desc = grpc: received message larger than max (5351376 vs. 4194304)`。這不表示使用者有任何故障或錯誤配置,也無需回應。

  • 當重新部署所有服務時,可能會發生協調器埠衝突。由於在短時間內有許多 Swarm 管理員請求,某些服務無法接收流量,並在部署後導致 `404` 錯誤。

    • 解決方法:通過 `docker service update --force` 重新啟動所有任務。
  • 由於 FORWARD 鏈中缺少 Iptables 規則,流量無法從主機流出。缺失的規則為

    /sbin/iptables --wait -C FORWARD -o docker_gwbridge -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    /sbin/iptables --wait -C FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    • 解決方法:使用腳本和 cron 定義將這些規則添加回來。腳本必須包含 '-C' 命令來檢查規則是否存在,並包含 '-A' 命令來添加規則。定期運行該腳本,例如每分鐘。
    • 受影響版本:18.09.1, 19.03.0
  • CVE-2018-15664 符號連結交換攻擊,帶目錄遍歷。在即將發布的修補版本中提供適當修正之前,暫時解決方法是:在執行檔案操作之前 `docker pause` 容器。 moby/moby#39252

  • 由於 CVE 緩解措施導致 `docker cp` 迴歸。當 `docker cp` 的來源設定為 `/` 時會產生錯誤。

19.03.0

2019-07-22

建置器

用戶端

  • 為 `docker update` 添加了 `--pids-limit` 旗標。 docker/cli#1765
  • 為服務添加了 systctl 支援。 docker/cli#1754
  • 在 compose 檔案中添加了對 `template_driver` 的支援。 docker/cli#1746
  • 為 Windows 添加了 `--device` 支援。 docker/cli#1606
  • 添加了對資料路徑埠配置的支援。 docker/cli#1509
  • 添加了快速上下文切換:命令。 docker/cli#1501
  • 添加了對 `--mount type=bind,bind-nonrecursive,...` 的支援 docker/cli#1430
  • 添加了每個節點的最大副本數。 docker/cli#1612
  • 添加了靜默拉取映像檔的選項。 docker/cli#882
  • 添加了一個單獨的 `--domainname` 旗標。 docker/cli#1130
  • 在 `docker stack deploy` 中添加了對密鑰驅動程式的支援。 docker/cli#1783
  • 添加了在服務上將 swarm `Configs` 作為 `CredentialSpecs` 使用的功能。 docker/cli#1781
  • 添加了 `--security-opt systempaths=unconfined` 支援。 docker/cli#1808
  • 添加了用於編寫和運行 CLI 外掛程式的基本框架。 docker/cli#1564 docker/cli#1898
  • 將 Docker App 升級至 v0.8.0。 docker/docker-ce-packaging#341
  • 添加了對 Docker buildx 的支援。 docker/docker-ce-packaging#336
  • 添加了對 Docker Assemble v0.36.0 的支援。
  • 添加了對 Docker Cluster v1.0.0-rc2 的支援。
  • 添加了對 Docker Template v0.1.4 的支援。
  • 添加了對 Docker Registry v0.1.0-rc1 的支援。
  • 將 google.golang.org/grpc 升級至 v1.20.1。 docker/cli#1884
  • CLI 已更改為將驅動程式特定選項傳遞給 `docker run`。 docker/cli#1767
  • 將 Golang 升級至 1.12.5。 docker/cli#1875
  • `docker system info` 輸出現在將客戶端和守護程式相關資訊分開。 docker/cli#1638
  • (實驗性) 當目標為 Kubernetes 時,在 compose 檔案服務配置中添加了對 `x-pull-secret: some-pull-secret` 的支援。 docker/cli#1617
  • (實驗性) 當目標為 Kubernetes 時,在 compose 檔案服務配置中添加了對 `x-pull-policy: <Never|Always|IfNotPresent>` 的支援。 docker/cli#1617
  • cp, save, export:現在防止覆寫不規則檔案。 docker/cli#1515
  • stack 檔案中的 npipe 磁碟區類型現在被允許。 docker/cli#1195
  • 修正 tty 初始大小錯誤。 docker/cli#1529
  • 修正標籤從環境變數複製值的問題。 docker/cli#1671

API

  • API 版本已更新至 v1.40。 moby/moby#38089
  • 為 `/info` 端點添加了警告,並將檢測移至守護程式。 moby/moby#37502
  • 為 `/_ping` 端點添加了 HEAD 支援。 moby/moby#38570
  • 為 `/_ping` 端點添加了 `Cache-Control` 標頭以禁用快取。 moby/moby#38569
  • 為 `/version` 添加了 `containerd`、`runc` 和 `docker-init` 版本。 moby/moby#37974
  • 添加了未記錄的 `/grpc` 端點並註冊了 BuildKit 的控制器。 moby/moby#38990

實驗性功能

安全性

執行時期

  • 現在允許以非 root 使用者身份運行 `dockerd`(無根模式)。 moby/moby#380050
  • 無根模式:為 `lxc-user-nic` SUID 二進位檔提供可選支援。 docker/engine#208
  • 為 HostConfig 添加了 DeviceRequests 以支援 NVIDIA GPU。 moby/moby#38828
  • 為 Windows 添加了 `--device` 支援。 moby/moby#37638
  • 為 Linux 添加了 `memory.kernelTCP` 支援。 moby/moby#37043
  • Windows 憑證規範現在可以直接傳遞給引擎。 moby/moby#38777
  • 在 docker update 中添加了 pids-limit 支援。 moby/moby#32519
  • 添加了對精確能力列表的支援。 moby/moby#38380
  • 守護程式:現在預設使用「private」IPC 模式。 moby/moby#35621
  • 守護程式:切換到信號量閘控的 WaitGroup 進行啟動任務。 moby/moby#38301
  • 現在使用 `idtools.LookupGroup` 而不是解析 `/etc/group` 檔案來確定 docker.sock 的所有權,以修正:`api.go 不尊重 nsswitch.conf`。 moby/moby#38126
  • cli:修正使用多參考過濾器時的映像檔過濾器。 moby/moby#38171
  • 將 Golang 升級至 1.12.5。 docker/engine#209
  • 將 `containerd` 升級至 1.2.6。 moby/moby#39016
  • 將 `runc` 升級至 1.0.0-rc8,opencontainers/selinux v1.2.2。 docker/engine#210
  • 將 `google.golang.org/grpc` 升級至 v1.20.1。 docker/engine#215
  • 在 aufs 和層儲存中優化性能,以實現大規模並行容器創建/移除。 moby/moby#39135 moby/moby#39209
  • Root 現在傳遞給 chroot 以進行 chroot Tar/Untar (CVE-2018-15664) moby/moby#39292
  • 修正帶有 /dev 綁定掛載的 `docker --init`。 moby/moby#37665
  • 當設備號大於 255 並使用 `--device-read-bps` 選項時,現在會獲取正確的設備號。 moby/moby#39212
  • 修正路徑確實存在時卻顯示「路徑不存在」的錯誤。 moby/moby#39251

網路

Swarm

日誌記錄

棄用

  • 棄用映像檔清單 v2 schema1,轉而使用 v2 schema2。未來的 Docker 版本將完全移除對 v2 schema1 的支援。 moby/moby#39365
  • 移除了 v1.10 移轉器。 moby/moby#38265
  • 現在自動選擇時跳過棄用的儲存驅動程式。 moby/moby#38019
  • 棄用 `aufs` 儲存驅動程式並添加警告。 moby/moby#38090
  • 移除了對 17.09 的支援。

有關棄用旗標和 API 的更多資訊,請參閱 棄用資訊 以了解目標移除日期。

已知問題

  • 在某些大型叢集的情況下,Docker 資訊在 Swarm 部分可能會包含錯誤 `code = ResourceExhausted desc = grpc: received message larger than max (5351376 vs. 4194304)`。這不表示使用者有任何故障或錯誤配置,也無需回應。

  • 當重新部署所有服務時,可能會發生協調器埠衝突。由於在短時間內有許多 Swarm 管理員請求,某些服務無法接收流量,並在部署後導致 `404` 錯誤。

    • 解決方法:通過 `docker service update --force` 重新啟動所有任務。
  • 由於 FORWARD 鏈中缺少 Iptables 規則,流量無法從主機流出。缺失的規則為

    /sbin/iptables --wait -C FORWARD -o docker_gwbridge -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    /sbin/iptables --wait -C FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    • 解決方法:使用腳本和 cron 定義將這些規則添加回來。腳本必須包含 '-C' 命令來檢查規則是否存在,並包含 '-A' 命令來添加規則。定期運行該腳本,例如每分鐘。
    • 受影響版本:18.09.1, 19.03.0
  • CVE-2018-15664 符號連結交換攻擊,帶目錄遍歷。在即將發布的修補版本中提供適當修正之前,暫時解決方法是:在執行檔案操作之前 `docker pause` 容器。 moby/moby#39252

  • 由於 CVE 緩解措施導致 `docker cp` 迴歸。當 `docker cp` 的來源設定為 `/` 時會產生錯誤。

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.