nodejs / docker-node

Official Docker Image for Node.js :whale: :turtle: :rocket:
https://hub.docker.com/_/node/
MIT License
8.13k stars 1.95k forks source link

docker buildx hang on node:22-alpine (armv6/armv7) #2077

Open pheiduck opened 1 month ago

pheiduck commented 1 month ago

Environment

Expected Behavior

No hanging build on armv6/armv7

Current Behavior

build is hanging on npm ci --omit=dev

Possible Solution

none

Steps to Reproduce

run docker deployment on github ci

Additional Information

Logs: https://productionresultssa4.blob.core.windows.net/actions-results/c81c7c78-0f17-4d1b-bb6e-eedc5023c285/workflow-job-run-e07742bd-189a-5079-918b-43f8b2f94b89/logs/job/job-logs.txt?rsct=text%2Fplain&se=2024-05-04T18%3A34%3A48Z&sig=kywF%2F31fsM6a0PFRA%2BGMwEYu9RkOcGzkAq1EUZumrx8%3D&sp=r&spr=https&sr=b&st=2024-05-04T18%3A24%3A43Z&sv=2021-12-02

LaurentGoderre commented 1 month ago

This is a known issue with the armv6 armv7. No solution has been found yet

nschonni commented 1 month ago

I believe the Alpine builds, except ppcle are working again

pheiduck commented 1 month ago

Glade to hear will try it.

pheiduck commented 1 month ago

I believe the Alpine builds, except ppcle are working again

armv6/7 still not working

LaurentGoderre commented 1 month ago

Yeah, I don't think the root cause of this has been found yet.

pabra commented 2 weeks ago

I had the same issue with node:20.14.0-alpine for arm/v7 (cannot say anything about arm/v6). Adding --platform=$BUILDPLATFORM to FROM solved it for me. Read about it in the docs. This is what my multistage Dockerfile now looks like:

ARG BASE_IMAGE=node:20.14.0-alpine

FROM --platform=$BUILDPLATFORM ${BASE_IMAGE} AS builder
RUN /build/stuff
...

FROM --platform=$BUILDPLATFORM ${BASE_IMAGE}
COPY --from=builder /stuff ./
...
LaurentGoderre commented 2 weeks ago

@pabra I might be simpler to specify the platform in the command instead of in the Dockerfile like docker build --platform linux/arm/v7 and docker run --platform linux/arm/v7

pheiduck commented 2 weeks ago

@pabra on github CI this will use the host arch, which does not solve my issue here. build npm pkgs on an older nodejs is the way to go until now...

pabra commented 2 weeks ago

@LaurentGoderre @pheiduck I use this Dockerfile with this github action. And it now builds images for platforms: linux/amd64,linux/arm64,linux/arm/v7. Without --platform=$BUILDPLATFORM in the Dockerfile, it hang for arm v7.

Not sure what you are doing, @pheiduck. I use docker buildx with qemu in CI, so $BUILDPLATFORM is not the host arch but the arch emulated by qemu. Maybe $TARGETPLATFORM is for you?

pheiduck commented 2 weeks ago

Maybe $TARGETPLATFORM is for you?

Will try it

pheiduck commented 2 weeks ago

$TARGETPLATFORM does not work either...

n0rt0nthec4t commented 1 week ago

I cannot believe this has gone on so long without a resolution since 18.x builds. Appears so many issues raised across multiple issues

LaurentGoderre commented 1 week ago

It seems the error is that it runs out of memory:

docker run --cap-add=SYS_PTRACE -e QEMU_STRACE=1 --rm -it --platform linux/arm/v7 node:22-alpine
1 mremap(1082126336,4096,8192,0,0,1082133536) = -1 errno=12 (Out of memory)
1 mremap(1082122240,4096,8192,0,0,1082133536) = -1 errno=12 (Out of memory)
1 mremap(1082118144,4096,8192,0,0,1082133536) = -1 errno=12 (Out of memory)
1 mremap(1082114048,4096,8192,0,0,1082133536) = -1 errno=12 (Out of memory)
1 mremap(1082109952,4096,8192,0,0,1082133536) = -1 errno=12 (Out of memory)
1 mremap(1082105856,4096,8192,0,0,1082133536) = -1 errno=12 (Out of memory)
1 mremap(1082101760,4096,8192,0,0,1082133536) = -1 errno=12 (Out of memory)
1 mremap(1082097664,4096,8192,0,0,1082133536) = -1 errno=12 (Out of memory)
LaurentGoderre commented 1 week ago

https://github.com/nodejs/node/issues/53489