背景#
因为一直使用的时amd64的镜像包,最近部署的服务器上都是arm64的,需要重新Build镜像。打包时一直出现下面的问题:
docker buildx build --platform linux/arm64 -t xxxx:v2.0.0-arm64 --load .
[+] Building 30.0s (4/4) FINISHED docker-container:rebuilder
=> [internal] booting buildkit 2.8s
=> => pulling image moby/buildkit:buildx-stable-1 1.4s
=> => creating container buildx_buildkit_rebuilder0 1.3s
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 3.53kB 0.0s
=> ERROR [internal] load metadata for docker.io/library/python:3.11-slim 26.9s
=> [auth] library/python:pull token for registry-1.docker.io 0.0s
------
> [internal] load metadata for docker.io/library/python:3.11-slim:
------
Dockerfile:2
--------------------
1 | # 使用官方 Python 3.11 镜像,它原生支持 amd64/arm64
2 | >>> FROM python:3.11-slim
3 |
4 | # 设置环境变量(与原镜像保持一致)
--------------------
ERROR: failed to build: failed to solve: failed to fetch oauth token: Post "https://auth.docker.io/token": dial tcp 162.125.6.1:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
View build details: docker-desktop://dashboard/build/rebuilder/rebuilder0/11csl1nm8xykhruo2puojo06p原因#
我是在Windows中安装了Docker Desktop。但是它默认会自带Buildx:
docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default docker
\_ default \_ default running v0.32.2 linux/amd64 (+3), linux/arm64, linux/arm (+2), linux/ppc64le, (2 more)
desktop-linux docker
\_ desktop-linux \_ desktop-linux running v0.32.2 linux/amd64 (+3), linux/arm64, linux/arm (+2), linux/ppc64le, (2 more)但是我又重新创建了一个名为rebuilder的Buildx
docker buildx create --name rebuilder --use此时,打包就会报错。
然后我又想到使用本机代理
docker buildx rm rebuilder
docker buildx create --name rebuilder `
> --driver docker-container `
> --driver-opt network=host `
> --use依旧报错。
那就指定代理:使用了局域网IP,以及开启了局域网连接。
docker buildx create --name rebuilder `
> --driver docker-container `
> --driver-opt env.HTTP_PROXY=http://172.16.10.53:7897 `
> --driver-opt env.HTTPS_PROXY=http://172.16.10.53:7897 `
> --use依旧报错。 暂时没空研究原因时为啥todo一下。
解决#
docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
rebuilder* docker-container
\_ rebuilder0 \_ desktop-linux running v0.32.2 linux/amd64 (+3), linux/arm64, linux/arm (+2), linux/ppc64le, (3 more)
default docker
\_ default \_ default running v0.32.2 linux/amd64 (+3), linux/arm64, linux/arm (+2), linux/ppc64le, (2 more)
desktop-linux docker
\_ desktop-linux \_ desktop-linux running v0.32.2 linux/amd64 (+3), linux/arm64, linux/arm (+2), linux/ppc64le, (2 more)看到了自带的desktop-linux,那就试试吧
docker buildx use desktop-linux然后执行打包命令
docker buildx build --platform linux/arm64 -t xxx:v2.0.0-arm64 --load .丝滑!!!但是Why?
