Skip to content

NPM install stucks with node:20 #1946

Description

@riethmue

Environment

  • Platform: MacOS Ventura (13.4.1) on M1
  • Docker Version: 24.0.5
  • Node.js Version: 20
  • Image Tag: 20

Expected Behavior

NPM install should be started. I've tested this with node:18 image instead and it works. node:20-slim stucks too.

Current Behavior

NPM install does not start and stucks.

[test] docker build --progress=plain --platform linux/amd64 -t test-image .     9:52:01 
#0 building with "desktop-linux" instance using docker driver

#1 [internal] load .dockerignore
#1 transferring context: 66B done
#1 DONE 0.0s

#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 414B done
#2 DONE 0.0s

#3 [internal] load metadata for docker.io/library/node:20
#3 DONE 1.3s

#4 [1/5] FROM docker.io/library/node:20@sha256:64b71834718b859ea389790ae56e5f2f8fa9456bf3821ff75fa28a87a09cbc09
#4 CACHED

#5 [2/5] WORKDIR /usr/src/app
#5 DONE 0.0s

#6 [internal] load build context
#6 transferring context: 1.12kB 0.0s done
#6 DONE 0.0s

#7 [3/5] COPY package*.json ./
#7 DONE 0.0s

#8 [4/5] RUN npm install

I've tried other npm commands like npm cache clean --force but those stuck too.

Possible Solution

Steps to Reproduce

I'm using the docker file from official nodejs example :

FROM node:20

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --omit=dev

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]

Additional Information

Activity

  1. dannykruitbosch commented on Aug 10, 2023

    @dannykruitbosch

    I have the same issue with yarn

  2. matteovivona commented on Aug 14, 2023

    @matteovivona

    Same here. My image works with Node 16, 18 and 19. With 20 even corepack enable command gets stuck

    Update: on my pipeline based on Ubuntu-22.04 linux/amd64 works

  3. LaurentGoderre commented on Sep 14, 2023

    @LaurentGoderre
    Member

    I just tried on Ventura with an M2 chip and it didn't hang

  4. LaurentGoderre commented on Sep 14, 2023

    @LaurentGoderre
    Member

    I am ablwe to reproduce the behavior when disabling my network. I am wondering if some firewall rule might be blocking traffic.

  5. callmemaxi commented on Sep 25, 2023

    @callmemaxi

    Hi, I'm also facing the same issue. I'm using M1 Mac. I'm observing this issue since last week. I have tried Node 20,18 alpine, slim and latest. The issue persist.

  6. callmemaxi commented on Sep 25, 2023

    @callmemaxi

    I was able to run yarn and npm commands now after disabling Use Rosetta for x86/amd64 emulation on Apple Silicon option in docker settings. Not sure this is a fix.

  7. eric-zeng commented on Sep 25, 2023

    @eric-zeng

    I'm encountering the same issue - docker build hangs on RUN npm install. The problem occurs when trying to build an image using --platform=linux/amd64 on Docker Desktop Mac.

    (Why do this? I want to test an image on my mac laptop that will eventually run in an amd64 environment, and one apt dependency does not have an arm64 version)

    Workarounds I found:

    • Downgrade to the previous base node image (node:18.17.0, should be the case for node:20 as well)
    • Turn off Rosetta, as @callmemaxi suggested (slow)
    • Build for arm64 (causes issues if you need amd64)

    Dockerfile

    FROM --platform=linux/amd64 node:18
    RUN npm install --loglevel verbose
    CMD index.js
    

    package.json

    {
      "name": "docker-bug",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "type": "module",
      "license": "ISC",
      "dependencies": {
        "chalk": "^5.3.0"
      }
    }
    

    index.js

    import chalk from 'chalk';
    console.log(chalk.green('Hello world'));
    

    Console output

    $ docker build . -t node-docker-bug
    [+] Building 11.7s (4/5)                                                                                                                                  docker:desktop-linux
     => [internal] load .dockerignore                                                                                                                                         0.0s
     => => transferring context: 2B                                                                                                                                           0.0s
     => [internal] load build definition from Dockerfile                                                                                                                      0.0s
     => => transferring dockerfile: 120B                                                                                                                                      0.0s
     => [internal] load metadata for docker.io/library/node:18                                                                                                                0.3s
     => CACHED [1/2] FROM docker.io/library/node:18@sha256:ee0a21d64211d92d4340b225c556e9ef1a8bce1d5b03b49f5f07bf1dbbaa5626                                                   0.0s
     => [2/2] RUN npm install --loglevel verbose                                                                                                                             11.5s
     => => # npm info using npm@9.8.1                                                                                                                                             
     => => # npm info using node@v18.18.0                                                                                                                                         
     => => # npm verb title npm install                                                                                                                                           
     => => # npm verb argv "install" "--loglevel" "verbose"                                                                                                                       
     => => # npm verb logfile logs-max:10 dir:/root/.npm/_logs/2023-09-25T19_40_55_092Z-                                                                                          
     => => # npm verb logfile /root/.npm/_logs/2023-09-25T19_40_55_092Z-debug-0.log  
    
  8. will3942 commented on Oct 2, 2023

    @will3942

    Same issue affecting npm and yarn when using docker buildx and building for linux/arm/v7

  9. ozbillwang commented on Nov 15, 2023

    @ozbillwang

    got same issues , you can easily duplicate this issue with below commands

    $ cat Dockerfile
    
    FROM node:lts-alpine
    
    RUN export PATH=/usr/local/bin:$PATH && npm install -g semver
    
    CMD ["semver", "--help"]
    
    $ export platform="linux/arm/v7"
    
    $ docker buildx build --progress=plain --platform "${platform}" --tag demo .
    
    ...
    #6 [2/2] RUN export PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin && npm install -g semver
    
    

    Then it stucks at installation forever.

    run tests on below platforms

    linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x
    
    • platforms without problem: linux/amd64, linux/arm64/v8, linux/ppc64le
    • platforms with buildx hangs on problem: linux/s390x, inux/arm/v6, linux/arm/v7
  10. pheiduck commented on Dec 3, 2023

    @pheiduck

    My workaround at the moment is to stay on Node 18.x.
    I hope there will be a fix for the armv6 and armv7 architectures. Otherwise I will have to drop them.
    Maybe Node 22.x

  11. n0rt0nthec4t commented on Dec 12, 2023

    @n0rt0nthec4t

    Also have the same issue, and reverted back to Node 18.x for my docker builds.

  12. agners commented on Jan 3, 2024

    @agners

    It seems that this is a duplicate of #1798? I see the same seqence of mremap as reported in #1798 (comment) when using strace with the reproducer from #1946 (comment).

  13. omaraboumrad commented on Jan 15, 2024

    @omaraboumrad

    Upgrading from Docker Desktop 4.21 to 4.26.1 (Latest at the time of this writing) seems to have fixed this problem for me on an M2 Mac.

  14. added a commit that references this issue on Feb 4, 2024
  15. brianbraunstein commented on Mar 20, 2024

    @brianbraunstein

    Trigger

    What triggered this problem for me was updating my package-lock.json from version 1 to version 3.

    Solution

    The key solution for me was using npm install --no-audit, which also just makes it run much faster, and auditing can probably just be done independently of the normal build/CI process.

    Details

    Here are some additional details I gathered before finding the final solution, in case it's helpful for others, or for debugging the root problem.

    Sorta Solutions

    These attempts somewhat worked but not in a satisfactory way...

    • Reverting back to my version 1 package-lock.json file worked, but I didn't want to stick with this because it felt fragile and it was slow because npm had to recreate it each time I ran my docker-based build (unless in the docker cache).

    • For 1 code repository, it worked to remove the package-lock.json file and recreate it, but this didn't work for my other repo.

    Non-Solutions

    These attempts didn't work...

    • Flushing docker state with ...
    docker container prune -a
    docker rm -f $(docker ps -qa)
    docker image prune -a
    docker volume prune
    docker volume rm $(docker volume ls -q)
    docker buildx prune
    
    apt-cache madison docker-ce
    va=... # pick an older version from above
    apt-cache madison containerd.io
    vb=... # pick an older version from above
    
    apt-get install docker-ce=$va containerd.io=$vb
    # restarted
    
    • Installing the latest LTS node currently 20.11.1 which contains npm version 10.2.4

    • Deleting and recreating my package-lock.json (although it worked for the 1 repo mentioned above)

    • Using docker build --network=host

  16. 52 remaining items

  17. kaaax0815 commented on Feb 7, 2025

    @kaaax0815

    Sorry. Was a typo. I was using pnpm the whole way

    Edit: nvm I was using npm, but why does it only in GitHub actions. Building it locally works fine.

    In the second stage there is no pnpm as I only normally copy build results. So using npm should be fine

  18. pipex commented on Feb 7, 2025

    @pipex

    In my testing this only happens when running a musl Node build in an emulated environment, for instance my platform does not support armv7 natively

    $ docker buildx inspect
    ...
    BuildKit version: v0.13.2
    Platforms:        linux/arm64, linux/amd64, linux/amd64/v2
    $ docker run --rm --platform linux/arm/v7 -ti node:lts node -e "console.log(1)"
    exec /usr/local/bin/docker-entrypoint.sh: exec format error
    

    Adding emulated support

    $ docker run --rm --privileged tonistiigi/binfmt:qemu-v9.2.0-46 --install linux/arm/v7
    installing: arm OK
    {
      "supported": [
        "linux/arm64",
        "linux/amd64",
        "linux/arm/v7",
        "linux/arm/v6"
      ],
      "emulators": [
        "python3.12",
        "qemu-arm",
        "qemu-x86_64"
      ]
    }
    $ docker buildx inspect
    BuildKit version: v0.13.2
    Platforms:        linux/arm64, linux/amd64, linux/amd64/v2, linux/arm/v7, linux/arm/v6
    

    Now, the following works

    $ docker run --rm --platform linux/arm/v7 -ti node:lts node -e "console.log(1)"
    1
    

    But the following hangs forever

    $ docker run --rm --platform linux/arm/v7 -ti node:lts-alpine node -e "console.log(1)"
    

    There may be other conditions that also cause npm install to hang, but this is the one that I've most consistently ran into and is doesn't seem related to the node version. Maybe a bug in QEMU?

  19. kaaax0815 commented on Feb 10, 2025

    @kaaax0815

    I can confirm the problem pipex has on a mac m1 pro.

    It worked once, but after a uninstall and reinstall of binfmt it stopped working again. This is very weird

  20. himself65 commented on Mar 3, 2025

    @himself65
    Member

    same issue with FROM --platform=linux/amd64 node:22.4-bookworm

  21. added a commit that references this issue on Mar 18, 2025
  22. MedAzizTousli commented on Apr 9, 2025

    @MedAzizTousli

    Any plans to fix this issue? I migrated my Kubernetes cluster to use ARM-based nodes instead of AMD-based nodes, and I cannot deploy my Node-based applications anymore because of this.

  23. Lazerbeak12345 commented on Apr 9, 2025

    @Lazerbeak12345

    There's more than one issue here. It no longer happens for me on the latest version of all involved packages, and I haven't had it happen in months.

    If you can recreate it in a Docker container, providing a Docker file may help the maintainers debug this.

    EDIT: There is a dockerfile provided above. Guess debugging is the next step.

  24. lyswhut commented on Apr 10, 2025

    @lyswhut

    There's more than one issue here. It no longer happens for me on the latest version of all involved packages, and I haven't had it happen in months.

    If you can recreate it in a Docker container, providing a Docker file may help the maintainers debug this.

    EDIT: There is a dockerfile provided above. Guess debugging is the next step.

    As far as I tested, it is still not solved now

    You can reproduce it with the following Dockerfile, console.log(1) will hang:

    FROM node:lts-alpine
    RUN node -e "console.log(1)"
    docker buildx build --platform linux/arm/v7 -t test .
  25. Koenkk commented on Apr 15, 2025

    @Koenkk

    Seems to be finally fixed now (run)!

  26. tyranron commented on Apr 17, 2025

    @tyranron

    Yes, for linux/arm/v7 and linux/arm/v6 now runs OK. Still hangs, though, on linux/s390x.

  27. added a commit that references this issue on Apr 18, 2025
  28. Lazerbeak12345 commented on Oct 10, 2025

    @Lazerbeak12345
  29. MikeMcC399 commented on May 3, 2026

    @MikeMcC399
    Contributor

    Closing as stale, since Node.js 20 reached end-of-life on 2026-04-30.

    The remark in #1946 (comment) about linux/s390x sounds like a emulation issue that can't be fixed here, since this repo does not supply emulation.

    Other remarks indicate that the initial issue may no longer be a problem in general.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions