Closed zw963 closed 9 months ago
能否提供 Dockerfile 方便我们复现?
无法复现:
> docker run -it --rm --platform=linux/arm64 alpine:3.19
Unable to find image 'alpine:3.19' locally
3.19: Pulling from library/alpine
c30352492317: Pull complete
Digest: sha256:51b67269f354137895d43f3b3d810bfacd3945438e94dc5ac55fdac340352f48
Status: Downloaded newer image for alpine:3.19
/ # sed -i "s/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g" /etc/apk/repositories
/ # apk update
fetch https://mirrors.ustc.edu.cn/alpine/v3.19/main/aarch64/APKINDEX.tar.gz
fetch https://mirrors.ustc.edu.cn/alpine/v3.19/community/aarch64/APKINDEX.tar.gz
v3.19.0-240-g97aef46a80c [https://mirrors.ustc.edu.cn/alpine/v3.19/main]
v3.19.0-239-gfd557282b4a [https://mirrors.ustc.edu.cn/alpine/v3.19/community]
OK: 22843 distinct packages available
/ # apk add ca-certificates
(1/1) Installing ca-certificates (20230506-r0)
Executing busybox-1.36.1-r15.trigger
Executing ca-certificates-20230506-r0.trigger
OK: 8 MiB in 16 packages
/ #
能否提供 Dockerfile 方便我们复现?
最后一个 staging 可能还没很好工作,但是不用管它。
我是这样运行的。
target="aarch64-linux-musl" arch="linux/arm64/v8"
docker buildx build --progress=plain --no-cache --build-arg TARGETARCH=$target --platform $arch --target mini -t crystal_build_staticbinary$arch --output type=local,dest=$arch -f "上面的文件" .
谢谢。
根据你的 log 输出,我复制了你的 Dockerfile 前面 4 个步骤,然后 docker build -t t .
,其中 [base 3/4]
步骤正常运行,无法复现你的问题。
是否可以重新提供一个最小可复现样例?你的 Dockerfile 过于庞大,而且你的 buildx 命令我无法直接使用:
$ docker buildx build --progress=plain --no-cache --build-arg TARGETARCH=$target --platform $arch --target mini -t crystal_build_static_binary_$arch --output type=local,dest=$arch .
#0 building with "default" instance using docker driver
#1 [internal] load .dockerignore
#1 transferring context: 2B done
#1 DONE 0.0s
#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 1.41kB done
#2 DONE 0.0s
ERROR: failed to solve: target stage mini could not be found
我怀疑是因为构建 base 和 link_target 是同时进行的,并且都挂载了 cache mount,导致有两个 apk 同时在写数据(导致损坏),是该 Dockerfile 写法上出现的并发问题,与镜像站无关。
多谢,我刚想起来,最近更改过启动 dockerd 的 --registry-mirror=??? 参数,我换了一个新的 mirror, docker_mirror=https://mirror.ccs.tencentyun.com, 本地重新启动了下 dockerd, 似乎可以了。
不确定是不是官方源问题,哈,所以在这里提一下。
#10 [link_target 3/8] RUN --mount=type=cache,target=/var/cache/apk set -ux; apk add --update gc-dev pcre2-dev libevent-static sqlite-static openssl-dev openssl-libs-static zlib-dev zlib-static g++ make automake libtool autoconf curl git ;
#10 0.034 + apk add --update gc-dev pcre2-dev libevent-static sqlite-static openssl-dev openssl-libs-static zlib-dev zlib-static g++ make automake libtool autoconf curl git
#10 0.069 fetch https://mirrors.ustc.edu.cn/alpine/v3.19/main/aarch64/APKINDEX.tar.gz
#10 1.089 WARNING: updating https://mirrors.ustc.edu.cn/alpine/v3.19/main: No such file or directory
#10 1.089 fetch https://mirrors.ustc.edu.cn/alpine/v3.19/community/aarch64/APKINDEX.tar.gz
#10 CANCELED
#11 [base 3/6] RUN --mount=type=cache,target=/var/cache/apk set -eux; apk add --update ca-certificates yaml-dev yaml-static openssl-dev openssl-libs-static zlib-dev zlib-static libunwind-dev libunwind-static libssh2-dev libssh2-static lz4-dev lz4-static sqlite-static libxml2-dev tzdata crystal shards ;
#11 0.020 + apk add --update ca-certificates yaml-dev yaml-static openssl-dev openssl-libs-static zlib-dev zlib-static libunwind-dev libunwind-static libssh2-dev libssh2-static lz4-dev lz4-static sqlite-static libxml2-dev tzdata crystal shards
#11 0.023 fetch https://mirrors.ustc.edu.cn/alpine/v3.19/main/x86_64/APKINDEX.tar.gz
#11 0.812 fetch https://mirrors.ustc.edu.cn/alpine/v3.19/community/x86_64/APKINDEX.tar.gz
#11 1.243 WARNING: opening from cache https://mirrors.ustc.edu.cn/alpine/v3.19/community: IO ERROR
#11 1.256 ERROR: unable to select packages:
#11 1.256 crystal (no such package):
#11 1.256 required by: world[crystal]
#11 1.256 shards (no such package):
#11 1.256 required by: world[shards]
正如你看到的,有两行有错误。
#10 1.089 WARNING: updating https://mirrors.ustc.edu.cn/alpine/v3.19/main: No such file or directory
...
#11 1.243 WARNING: opening from cache https://mirrors.ustc.edu.cn/alpine/v3.19/community: IO ERROR
并且都挂载了 cache mount,导致有两个 apk 同时在写数据(导致损坏),
如果这真的是这个问题,但是我将 mirrors.ustc.edu.cn
替换回 dl-cdn.alpinelinux.org
就立刻工作的很好了,奇怪。
抱歉, 可能还是本地网络问题,又跑了一次,问题再次出现。
不确定是不是官方源问题,哈,所以在这里提一下。
请参考 https://github.com/ustclug/discussions/issues/442#issuecomment-1891768164,如果无法复现的话,那么基本可以说明不是镜像站的问题。
如果这真的是这个问题,但是我将 mirrors.ustc.edu.cn 替换回 dl-cdn.alpinelinux.org 就立刻工作的很好了,奇怪。
并发问题是存在随机性的,与此同时与很多因素都有关。一种可能的解释是,dl-cdn.alpinelinux.org
下载更慢,所以更不容易触发问题。
我相信在上面的回复中我已经明确指出了你的 Dockerfile 问题所在(并且修复的方式也很明显——不要自己搞 cache,或者想办法让它们不要同时进行构建),之后除非有更新的、能够证明不是并发问题的信息,否则恐怕我没有再回复的必要了。
不确定是不是官方源问题,哈,所以在这里提一下。
请参考 #442 (comment),如果无法复现的话,那么基本可以说明不是镜像站的问题。
如果这真的是这个问题,但是我将 mirrors.ustc.edu.cn 替换回 dl-cdn.alpinelinux.org 就立刻工作的很好了,奇怪。
并发问题是存在随机性的,与此同时与很多因素都有关。一种可能的解释是,
dl-cdn.alpinelinux.org
下载更慢,所以更不容易触发问题。我相信在上面的回复中我已经明确指出了你的 Dockerfile 问题所在(并且修复的方式也很明显——不要自己搞 cache,或者想办法让它们不要同时进行构建),之后除非有更新的、能够证明不是并发问题的信息,否则恐怕我没有再回复的必要了。
无论如何,多谢!经过很多次尝试,基本确定,就是 cache mount 造成的,现在我全部移除了,用了很多次,但没出过问题。
RUN --mount=type=cache,target=/var/cache/apk
,完全是抄来的,不懂瞎用,自己给自己挖坑,汗~ 其实,build staging 根本没必要 cache, 反正会扔掉。
问题描述 / Bug description
不确定是我本地网络的问题还是 mirrors 的问题,三四天前还可以用的。
请参考如下 log:
我使用的 build 参数如下:
docker buildx build --progress=plain --no-cache ...
谢谢。