Docker Hub 拉取使用和限制
未經身份驗證的使用者和 Docker Personal 使用者在 Docker Hub 上受到 6 小時拉取速率限制。而 Docker Pro、Team 和 Business 使用者則享有無限拉取速率。
根據您的訂閱,以下拉取使用和限制適用,但須遵守合理使用原則
使用者型別 | 每 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,請參閱 登入操作。如果您正在使用其他操作,您必須以類似的方式新增您的使用者名稱和訪問令牌進行身份驗證。
Kubernetes
如果您正在執行 Kubernetes,請按照 從私有登錄檔拉取映象 中的說明進行身份驗證。
第三方平臺
如果您正在使用任何第三方平臺,請按照您的提供商關於使用登錄檔身份驗證的說明進行操作。
注意透過第三方平臺拉取映象時,該平臺可能會使用相同的 IPv4 地址或 IPv6 /64 子網為多個使用者拉取映象。即使您已透過身份驗證,歸因於單個 IPv4 地址或 IPv6 /64 子網的拉取也可能導致濫用速率限制。
- Artifactory
- AWS CodeBuild
- AWS ECS/Fargate
- Azure Pipelines
- Chipper CI
- CircleCI
- Codefresh
- Drone.io
- GitLab
- LayerCI
- TeamCity
檢視每月拉取和包含的使用情況
您可以在 Docker Hub 的使用情況頁面上檢視您的每月拉取量。
在該頁面上,您還可以向您的電子郵件傳送一份報告,其中包含以下詳細資訊的逗號分隔檔案。
CSV 列 | 定義 | 使用指南 |
---|---|---|
日期小時 | 導致資料傳輸的拉取的日期和小時(yyyy/mm/dd/hh )。 | 這有助於識別高峰使用時間和模式。 |
user_name | 拉取映象的使用者的 Docker ID | 這使得組織所有者能夠跟蹤每個使用者的資料消耗並有效管理資源。 |
倉庫 | 被拉取映象的倉庫名稱。 | 這使您能夠識別哪些倉庫被訪問最頻繁並消耗大部分資料傳輸。 |
access_token_name | 用於 Docker CLI 身份驗證的訪問令牌名稱。generated 令牌由 Docker 客戶端在使用者登入時自動生成。 | 個人訪問令牌通常用於驗證自動化工具(Docker Desktop、CI/CD 工具等)。這對於識別是哪個自動化系統發出了拉取非常有用。 |
ips | 用於拉取映象的 IP 地址。此欄位是聚合的,因此可能會出現多個 IP 地址,表示在同一日期和小時內用於拉取映象的所有 IP 地址。 | 這有助於您瞭解資料傳輸的來源,這對於診斷和識別自動化或手動拉取中的模式非常有用。 |
repository_privacy | 被拉取的映象倉庫的隱私狀態。可以是 public 或 private 。 | 這區分了公共和私有倉庫,以識別拉取影響了哪個資料傳輸閾值。 |
tag | 映象的標籤。僅當拉取包含標籤時,標籤才可用。 | 這有助於識別映象。標籤通常用於識別映象的特定版本或變體。 |
摘要 | 映象的唯一映象摘要。 | 這有助於識別映象。 |
版本檢查 | 每個映象倉庫在特定日期和小時內累積的版本檢查次數。根據客戶端的不同,拉取可以執行版本檢查以驗證映象或標籤是否存在,而無需下載它。 | 這有助於識別版本檢查的頻率,您可以用來分析使用趨勢和潛在的意外行為。 |
拉取次數 | 每個映象倉庫在特定日期和小時內累積的拉取次數。 | 這有助於識別倉庫拉取的頻率,您可以用來分析使用趨勢和潛在的意外行為。 |
檢視拉取速率和限制
拉取速率限制以 6 小時為基礎計算。對於付費訂閱使用者或自動化系統,沒有拉取速率限制。未經身份驗證的使用者和使用 Docker Hub 的 Docker Personal 使用者將遇到映象拉取速率限制。
當您發出拉取並且超出限制時,當請求清單時,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 日誌中。
要檢視您當前的拉取速率和限制
注意要檢查您的限制,您需要安裝
curl
、grep
和jq
。
獲取一個令牌。
如果您匿名拉取,則匿名獲取令牌
$ 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)
獲取包含您限制的標頭。這些標頭在 GET 和 HEAD 請求中都會返回。使用 GET 模擬實際拉取並計入限制。使用 HEAD 則不會。
$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest
檢查標頭。您應該會看到以下標頭。
ratelimit-limit: 100;w=21600 ratelimit-remaining: 20;w=21600 docker-ratelimit-source: 192.0.2.1
在前面的示例中,拉取限制是每 21600 秒(6 小時)100 次拉取,並且還剩下 20 次拉取。
如果您沒有看到任何
ratelimit
標頭,可能是因為該映象或您的 IP 地址與釋出者、提供商或開源組織合作而無限制。這還可能意味著您拉取時的使用者是付費 Docker 訂閱的一部分。如果您沒有看到這些標頭,拉取該映象將不計入拉取速率限制。