本文介紹Docker登入、推送和拉取失敗時處理方法。
docker login失敗
為什麼docker login失敗?
登入失敗時,參考如下步驟進行排查。
您使用了阿里雲賬戶的登入密碼,而不是Registry的獨立登入密碼。Registry的登入密碼是在Container Registry控制上設定與修改的,操作步驟如下。
在實例列表頁面單擊執行個體卡片,進入執行個體詳情頁。
在左側導覽列選擇。
在访问凭证頁面,單擊右上方的設置固定密碼。
在設置固定密碼對話方塊,設定Registry的登入密碼,然後單擊確定。
您使用了sudo進行登入。使用sudo時,系統第一個要求輸入的密碼是Linux的使用者密碼。您可能在這裡輸入了Registry的登入密碼,導致登入操作失敗。
區分這個錯誤的方式很簡單,Linux的使用者密碼大多允許嘗試三次,錯誤時會提示try again。而Registry的登入密碼錯誤一次之後就會退出,並返回以下錯誤。
Error response from daemon: Get https://registry.cn-hangzhou.aliyuncs.com/v2/: unauthorized: authentication required如果您使用的是RAM使用者,請勿使用阿里雲帳號設定的密碼登入鏡像倉庫,您需要在容器鏡像控制台設定密碼,然後使用該密碼登入鏡像倉庫。具體操作,請參見配置訪問憑證。
為什麼 docker login 報錯 Bad Request?
ECS 節點配置了 HTTPS_PROXY 代理時,Docker 請求經代理轉寄可能出現異常,返回 Bad Request 錯誤。排查步驟如下:
檢查
/etc/systemd/system/docker.service.d路徑下是否存在代理相關設定檔(如http-proxy.conf或https-proxy.conf)。備份並刪除該路徑下的代理設定檔。
執行以下命令重載配置並重啟 Docker:
systemctl daemon-reload && systemctl restart docker清除代理配置後重新執行
docker login。
為什麼docker login逾時?
檢查您的網路是否可以正常使用。如果您的網路不能正常使用,將無法訪問到執行個體,從而會導致docker login逾時,詳情請參見網路存取控制。
docker pull失敗
docker pull失敗,報錯提示Error: image xxx not found
報錯提示Error: image xxx not found
下載失敗時,請參考如下步驟進行排查。
檢查鏡像地址:
確認您輸入的鏡像地址是正確的,特別是在使用公用鏡像時。
可以在Container Registry控制中查看鏡像的具體地址和版本。
私人倉庫的登入狀態:
使用
cat ~/.docker/config.json查看已登入的 Registry 網域名稱,確保您的私人倉庫網域名稱在其中。如果未登入,需使用
docker login命令進行登入。
賬戶許可權:
確認您使用的賬戶有許可權訪問或下載該鏡像,尤其是使用子賬戶時,預設情況下可能沒有相關許可權。
可以在倉庫的存取控制設定中進行許可權管理。關於倉庫的存取控制授權,請參見倉庫存取控制。
少數情況下會出現如下報錯,下載的塊檔案檢驗失敗。一般重試即可解決。
報錯提示:Error: filesystem layer verification failed for digest
為什麼在企業版執行個體匿名拉取鏡像會失敗?
您需要在概覽頁面右側实例设置地區開啟公开匿名拉取,您才可以匿名拉取鏡像。
為什麼海外鏡像倉庫源拉取失敗?
由於電訊廠商網路等不穩定因素,可能會導致從海外鏡像倉庫拉取指定版本的容器鏡像失敗。
docker pull 報錯 manifest unknown,但倉庫中確實存在該鏡像怎麼辦?
該問題通常由用戶端與鏡像的 CPU 架構不匹配導致。例如用戶端為 ARM 架構,而鏡像僅包含 AMD64 架構的 manifest。排查步驟如下:
確認用戶端環境的 CPU 架構(ARM 或 AMD64),可執行
uname -m或docker info查看。嘗試在對應架構的伺服器上執行
docker pull,驗證是否能正常拉取。若無法提供帳號供複現,建議重新構建並推送一個新的 Tag。構建時多架構配置異常可能導致特定 Tag 的 manifest 資訊不完整,重新構建推送通常可解決該問題。
docker push失敗
docker push失敗,報錯提示denied: requested access to the resource is denied
上傳失敗時,主要的排查步驟和docker pull基本一致,只是授權要求的層級比docker pull更高。
為什麼docker push會失敗?
推送鏡像之前請確保鏡像已建立鏡像倉庫。如果沒有鏡像倉庫,請確保命名空間已開啟自動建立倉庫功能。
推送失敗與安全性群組及使用者權限問題
ACR 本身沒有安全性群組配置,推送失敗通常不是用戶端安全性群組導致的。建議檢查以下專案:
切換到 root 使用者執行
docker login和docker push操作。避免使用 sudo 或非 root 使用者(如 Mac、麒麟系統)操作。不同使用者的 Docker 憑證儲存路徑不同,可能導致無法準確更新本地憑證資訊。
推送報錯 certificate has expired or is not yet valid
處理方法如下:
備份並刪除用戶端
~/.docker/config.json檔案中的舊配置資訊。登入 ACR 控制台,擷取新的登入命令或設定新的訪問憑證。
執行
docker login重新登入後再嘗試推送。
Token 失效後的自動重新整理機制
當執行 docker push 時,如果 token 已失效或不存在,Docker 用戶端會自動使用 ~/.docker/config.json 中儲存的使用者名稱和密碼(auth 欄位 Base64 解碼後的資訊)向 dockerauth 服務發起請求,重新擷取新 token,無需人工幹預。
ACR 對單個流式 layer 推送的大小限制是多少?
ACR 對單個流式 layer 推送的大小沒有強制限制,但建議單層大小盡量不要超過 100 GB,以避免推送逾時或失敗。