所以再次卡住無法將影像完全推送到 docker hub。我過去也經歷過這種情況,并且回圈播放最終成功,但是當需要及時將影像分享給學生時,這是一個非常煩人的程序。
docker login成功docker push已經完成了一些層,一些重試后完成了一些層,還有一些已經存在,所以可以重用- 那么總會有這一層(每次構建新影像時不一定相同)卡在重試回圈中
它看起來像這樣:
The push refers to repository [docker.io/s4lab/gipsy-json-u18]
e17debe53e58: Pushing [==================================================>] 239.7MB/239.7MB
ebe677197a5c: Layer already exists
962812a24e35: Layer already exists
37850ad767c2: Layer already exists
0269df6e94f5: Layer already exists
e722d396f503: Layer already exists
write tcp 10.0.2.15:52930->34.205.13.154:443: write: connection reset by peer
The push refers to repository [docker.io/s4lab/gipsy-json-u18]
e17debe53e58: Retrying in 7 seconds
ebe677197a5c: Layer already exists
962812a24e35: Layer already exists
37850ad767c2: Layer already exists
0269df6e94f5: Layer already exists
e722d396f503: Layer already exists
每次嘗試目標 IP 地址/端點都會更改。
在日志中,它總是沿著這些線:
Oct 07 17:56:02 ub18 dockerd[1254]: time="2022-10-07T17:56:02.418642397-04:00" level=info msg="Attempting next endpoint for push after error: write tcp 10.0.2.15:57000->3.216.34.172:443: use of closed network connection"
Oct 07 17:56:03 ub18 dockerd[1254]: time="2022-10-07T17:56:03.550102562-04:00" level=error msg="Upload failed, retrying: write tcp 10.0.2.15:57026->3.216.34.172:443: use of closed network connection"
Oct 07 17:56:09 ub18 dockerd[1254]: time="2022-10-07T17:56:09.259048555-04:00" level=error msg="Upload failed, retrying: write tcp 10.0.2.15:52918->34.205.13.154:443: use of closed network connection"
Oct 07 17:56:27 ub18 dockerd[1254]: time="2022-10-07T17:56:27.499017532-04:00" level=error msg="Upload failed, retrying: write tcp 10.0.2.15:52922->34.205.13.154:443: use of closed network connection"
Oct 07 17:56:48 ub18 dockerd[1254]: time="2022-10-07T17:56:48.198701189-04:00" level=error msg="Upload failed, retrying: write tcp 10.0.2.15:52926->34.205.13.154:443: use of closed network connection"
Oct 07 17:57:12 ub18 dockerd[1254]: time="2022-10-07T17:57:12.688987070-04:00" level=error msg="Upload failed: write tcp 10.0.2.15:52930->34.205.13.154:443: write: connection reset by peer"
Oct 07 17:57:12 ub18 dockerd[1254]: time="2022-10-07T17:57:12.693009463-04:00" level=info msg="Attempting next endpoint for push after error: write tcp 10.0.2.15:52930->34.205.13.154:443: write: connection reset by peer"
Oct 07 17:57:14 ub18 dockerd[1254]: time="2022-10-07T17:57:14.146027151-04:00" level=error msg="Upload failed, retrying: write tcp 10.0.2.15:37338->44.205.64.79:443: write: broken pipe"
Oct 07 17:57:20 ub18 dockerd[1254]: time="2022-10-07T17:57:20.589127385-04:00" level=error msg="Upload failed, retrying: write tcp 10.0.2.15:37344->44.205.64.79:443: use of closed network connection"
這是在:
# uname -a
Linux ub18 5.4.0-70-generic #78~18.04.1-Ubuntu SMP Sat Mar 20 14:10:07 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
# docker version
Client:
Version: 20.10.7
API version: 1.41
Go version: go1.13.8
Git commit: 20.10.7-0ubuntu5~18.04.3
Built: Mon Nov 1 01:04:14 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server:
Engine:
Version: 20.10.7
API version: 1.41 (minimum version 1.12)
Go version: go1.13.8
Git commit: 20.10.7-0ubuntu5~18.04.3
Built: Fri Oct 22 00:57:37 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.5.5-0ubuntu3~18.04.2
GitCommit:
runc:
Version: 1.0.1-0ubuntu2~18.04.1
GitCommit:
docker-init:
Version: 0.19.0
GitCommit:
這些相關的問題/答案無濟于事:
- 在特定層上多次重試后,Docker 推送失敗
- Docker push,永遠重復推送一個層
- 在 GitHub 和其他地方談論私有和 ECR 存盤庫等的不同問題并不真正適用
那么在 2022 年有什么更可靠/更穩健的解決方案來解決這個問題呢?除非我遺漏了什么,否則這似乎是任意且難以解決的。這特別煩人,因為我過去能夠從相同的環境中毫無問題地推動。
uj5u.com熱心網友回復:
這似乎與網路有關。您網路上的某些東西正在破壞或斷開連接。我的假設來自 regctl 除錯日志,顯示它切換到帶有補丁請求的分塊上傳。這只發生在正常推送時斷開連接時。分塊上傳期間沒有其他錯誤排除了任何破壞主機上的摘要的情況。
regctl 中的默認塊大小為 1MB。這會導致大型影像的大量連接速度很慢,但在不穩定的網路上更可靠。您可以使用注冊表設定命令調整塊大小以提高速度,例如:
regctl registry set --blob-chunk 20971520 --blob-max 104857600 docker.io
使塊大小為 20MB,并在推送到 Docker Hub (docker.io) 時自動使用分塊上傳,而不是嘗試對任何超過 100MB 的層進行正常推送。
然后使用 regctl 代替 docker 進行推送,可以做到以下幾點:
docker save $image >file.tar
regctl image import $image file.tar -v info
同樣,如果您使用 buildx 構建鏡像,包括您無法存盤在 docker 引擎中的多平臺鏡像(目前),您可以直接匯出到可以使用相同命令匯入的 OCI 布局:
docker buildx build -o "type=oci,dest=file.tar" .
regctl image import $image file.tar -v info
免責宣告:我是regclient/regctl的作者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/512581.html
標籤:码头工人推码头工人
