buildx
buildx copied to clipboard
Multi-stage buildx build corrupts character special files
Single-stage (works)
FROM alpine:3.15
RUN mknod -m 444 /my-urandom c 1 9
CMD ls -l /dev/urandom /my-urandom
docker build
$ docker build -t docker-bug . && docker run --rm docker-bug
...
crw-rw-rw- 1 root root 1, 9 Mar 26 10:31 /dev/urandom
cr--r--r-- 1 root root 1, 9 Mar 26 10:24 /my-urandom
docker buildx
$ docker buildx build -t docker-bug . && docker run --rm docker-bug
...
crw-rw-rw- 1 root root 1, 9 Mar 26 10:33 /dev/urandom
cr--r--r-- 1 root root 1, 9 Mar 26 10:24 /my-urandom
Multi-stage (builx doesn't work)
FROM alpine:3.15
RUN mknod -m 444 /my-urandom c 1 9
FROM scratch
COPY --from=0 / /
CMD ls -l /dev/urandom /my-urandom
docker build
$ docker build -t docker-bug . && docker run --rm docker-bug
...
crw-rw-rw- 1 root root 1, 9 Mar 26 10:34 /dev/urandom
cr--r--r-- 1 root root 1, 9 Mar 26 10:24 /my-urandom
docker buildx
(note the lack of c in /my-urandom
)
$ docker buildx build -t docker-bug . && docker run --rm docker-bug
...
crw-rw-rw- 1 root root 1, 9 Mar 26 10:35 /dev/urandom
-r--r--r-- 1 root root 0 Mar 26 10:24 /my-urandom
I noticed this when switching an application to buildx that specifically doesn't mount the hosts /dev and just populates what it needs (like /dev/urandom) and those reads were blocking indefinitely since buildx had made a zero byte regular file instead.
Now it may be that this isn't a bug and that character special files aren't supported but I would argue it's at least a little surprising when both legacy docker build
and docker buildx
with single-stage build both worked.
$ docker version
Client:
Version: 20.10.14
API version: 1.41
Go version: go1.18
Git commit: a224086349
Built: Thu Mar 24 08:56:17 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server:
Engine:
Version: 20.10.14
API version: 1.41 (minimum version 1.12)
Go version: go1.18
Git commit: 87a90dc786
Built: Thu Mar 24 08:56:03 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.6.2
GitCommit: de8046a5501db9e0e478e1c10cbcfb21af4c6b2d.m
runc:
Version: 1.1.0
GitCommit: v1.1.0-0-g067aaf85
docker-init:
Version: 0.19.0
GitCommit: de40ad0
$ docker buildx version
github.com/docker/buildx v0.8.1-docker 5fac64c2c49dae1320f2b51f1a899ca451935554
I am running buildx v0.12.0 and buildkit v0.12.5 and the problem seems to be solved now!