nodejs / docker-node

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

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

Open pheiduck opened 6 months ago

pheiduck commented 6 months 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 6 months ago

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

nschonni commented 6 months ago

I believe the Alpine builds, except ppcle are working again

pheiduck commented 6 months ago

Glade to hear will try it.

pheiduck commented 6 months ago

I believe the Alpine builds, except ppcle are working again

armv6/7 still not working

LaurentGoderre commented 6 months ago

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

pabra commented 5 months 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 5 months 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 5 months 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 5 months 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 5 months ago

Maybe $TARGETPLATFORM is for you?

Will try it

pheiduck commented 5 months ago

$TARGETPLATFORM does not work either...

n0rt0nthec4t commented 5 months 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 5 months 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 5 months ago

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

shamoon commented 4 months ago

Unfortunately for us going back to older node isnt an option as the platform we use is now dependent on the newer node version, but of course this issue prevents us from being able to deploy—stuck between a rock and a hard place!

Wish I had a way to help try and solve, thanks for everyone's time.

pheiduck commented 4 months ago

Unfortunately for us going back to older node isnt an option as the platform we use is now dependent on the newer node version, but of course this issue prevents us from being able to deploy—stuck between a rock and a hard place!

Wish I had a way to help try and solve, thanks for everyone's time.

A Workaround we found out is to copy ofter build result to the newer image

shamoon commented 4 months ago

Thanks so much for the suggestion, unfortunately I dont think that works for us as we cant run the build on an older version with the updated package we want to use (next.js v14).

Fingers crossed this one gets solved 🤞