Docker Hub 拉取用量與限制

未驗證使用者和 Docker 個人版使用者在 Docker Hub 上受到 6 小時的拉取速率限制。相對地,Docker 專業版、團隊版和企業版使用者可享有無限的拉取速率。

以下拉取用量和限制將根據您的訂閱方案而定,並受公平使用原則約束

使用者類型每 6 小時拉取速率限制
企業版 (已驗證)無限制
團隊版 (已驗證)無限制
專業版 (已驗證)無限制
個人版 (已驗證)200
未驗證使用者每個 IPv4 位址或 IPv6 /64 子網路 100 次

拉取定義

拉取定義如下

  • Docker 拉取包含版本檢查以及因拉取而發生的任何下載。根據用戶端,docker pull 可透過執行版本檢查來驗證映像檔或標籤是否存在,而無需下載它。
  • 版本檢查不計入用量計費。
  • 對一般映像檔的拉取計為對 單一資訊清單 的一次拉取。
  • 對多架構映像檔的拉取,將針對每種不同架構計為一次拉取。

拉取歸因

已驗證使用者的拉取可歸因於個人命名空間或 組織命名空間

歸因依據如下

  • 私人拉取:私人儲存庫的拉取歸因於該儲存庫的命名空間擁有者。
  • 公共拉取:從公共儲存庫拉取映像檔時,歸因是根據網域關聯和組織成員資格決定的。
  • 已驗證網域所有權:從連結到已驗證網域的帳戶拉取映像檔時,歸因設定為該 網域 的擁有者。
  • 單一組織成員資格
    • 如果已驗證網域的擁有者是公司,且使用者僅屬於該 公司 內的單一組織,則拉取歸因於該特定組織。
    • 如果使用者僅屬於單一組織,則拉取歸因於該特定組織。
  • 多個組織成員資格:如果使用者屬於公司下的多個組織,則拉取歸因於使用者的個人命名空間。

驗證

為確保您的拉取被正確歸因,您必須向 Docker Hub 進行身份驗證。以下各節提供如何登入 Docker Hub 以驗證您的拉取資訊。

Docker Desktop

如果您使用 Docker Desktop,可以從 Docker Desktop 選單登入 Docker Hub。

從 Docker Desktop 選單中選擇登入 / 建立 Docker ID,並按照螢幕上的指示完成登入程序。

Docker Engine

如果您使用獨立版 Docker Engine,請從終端機執行 docker login 命令以向 Docker Hub 進行身份驗證。有關如何使用此命令的資訊,請參閱 docker login

Docker Swarm

如果您正在執行 Docker Swarm,必須使用 --with-registry-auth 旗標向 Docker Hub 進行身份驗證。欲了解更多資訊,請參閱 建立服務。如果您使用 Docker Compose 檔案部署應用程式堆疊,請參閱 docker stack deploy

GitHub Actions

如果您使用 GitHub Actions 建構並推送 Docker 映像檔至 Docker Hub,請參閱 登入動作。如果您使用其他 Action,則必須以類似方式新增使用者名稱和存取權杖進行身份驗證。

Kubernetes

如果您正在執行 Kubernetes,請遵循 從私人儲存庫拉取映像檔 中的指示以獲取身份驗證資訊。

第三方平台

如果您使用任何第三方平台,請遵循提供商關於使用儲存庫身份驗證的說明。

注意

透過第三方平台拉取映像檔時,該平台可能使用相同的 IPv4 位址或 IPv6 /64 子網路為多個使用者拉取映像檔。即使您已進行身份驗證,歸因於單一 IPv4 位址或 IPv6 /64 子網路的拉取也可能導致 濫用速率限制

檢視每月拉取次數與包含的用量

您可以在 Docker Hub 的 用量頁面 上檢視您的每月拉取次數。

在該頁面上,您還可以將一份包含以下詳細資訊的逗號分隔檔案報告傳送至您的電子郵件。

CSV 欄位定義使用指南
datehour導致資料傳輸的拉取日期和時間 (yyyy/mm/dd/hh)。這有助於識別尖峰使用時間和模式。
user_name拉取映像檔使用者的 Docker ID這讓組織擁有者可以追蹤每個使用者的資料消耗,並有效管理資源。
repository被拉取映像檔的儲存庫名稱。這讓您可以識別哪些儲存庫最常被存取並消耗大部分資料傳輸。
access_token_name用於 Docker CLI 身份驗證的存取權杖名稱。generated 權杖是使用者登入時由 Docker 用戶端自動生成的。個人存取權杖通常用於驗證自動化工具 (Docker Desktop、CI/CD 工具等)。這有助於識別是哪個自動化系統發出拉取。
ips用於拉取映像檔的 IP 位址。此欄位為聚合資料,因此可能會顯示多個 IP 位址,代表在相同日期和時間內用於拉取映像檔的所有 IP。這有助於您了解資料傳輸的來源,對於診斷和識別自動化或手動拉取中的模式很有用。
repository_privacy被拉取映像檔儲存庫的隱私狀態。這可以是 public (公開) 或 private (私人)。這區分了公共儲存庫和私人儲存庫,以識別拉取影響了哪個資料傳輸閾值。
tag映像檔的標籤。只有在拉取包含標籤時才可用。這有助於識別映像檔。標籤常用於識別映像檔的特定版本或變體。
摘要映像檔的唯一映像檔摘要 (digest)。這有助於識別映像檔。
version_checks每個映像檔儲存庫在指定日期和時間內累計的版本檢查次數。根據用戶端,拉取可以執行版本檢查以驗證映像檔或標籤是否存在,而無需下載它。這有助於識別版本檢查的頻率,您可以使用它來分析使用趨勢和潛在的非預期行為。
pulls每個映像檔儲存庫在指定日期和時間內累計的拉取次數。這有助於識別儲存庫拉取的頻率,您可以使用它來分析使用趨勢和潛在的非預期行為。

檢視拉取速率與限制

拉取速率限制以 6 小時為基準計算。對於付費訂閱的使用者或自動化系統,沒有拉取速率限制。未驗證使用者和使用 Docker Hub 的 Docker 個人版使用者將會遇到映像檔拉取的速率限制。

當您發出拉取請求且超出限制時,Docker Hub 在請求資訊清單時會傳回帶有以下內容的 429 回應碼

You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits

此錯誤訊息會顯示在 Docker CLI 或 Docker Engine 記錄中。

檢視您目前的拉取速率和限制

注意

若要檢查您的限制,您需要安裝 curlgrepjq

  1. 取得權杖。

    • 若要匿名取得權杖 (如果您匿名拉取)

      $ TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
      
    • 若要使用使用者帳戶取得權杖 (如果您已驗證),請將您的使用者名稱和密碼插入以下命令中

      $ TOKEN=$(curl --user 'username:password' "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
      
  2. 取得包含您限制的標頭。這些標頭會在 GET 和 HEAD 請求中傳回。使用 GET 會模擬實際拉取並計入限制。使用 HEAD 則不會。

    $ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest
    
  3. 檢查標頭。您應該會看到以下標頭。

    ratelimit-limit: 100;w=21600
    ratelimit-remaining: 20;w=21600
    docker-ratelimit-source: 192.0.2.1

    在前面的範例中,拉取限制是每 21600 秒 (6 小時) 100 次拉取,還剩 20 次拉取。

    如果您沒有看到任何 ratelimit 標頭,可能是因為該映像檔或您的 IP 位址在與發布者、提供者或開源組織的合作關係中是無限制的。這也可能表示您所拉取的映像檔使用者是付費 Docker 訂閱的一部分。如果您沒有看到這些標頭,拉取該映像檔將不計入拉取速率限制。

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