Search code examples
dockernpmdockerfile

How to install /usr/bin/npm with Docker


I have the following Dockerfile. It correctly installs /usr/bin/node but not /usr/bin/npm. What do I need to add/change to fix this?

FROM php:8.3-apache
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN apt-get update && \
    apt-get install -y gnupg && \
    mkdir -p /etc/apt/keyrings && \
    curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
    NODE_MAJOR=21 && \
    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \
    apt-get install -y zip mariadb-client libmagickwand-dev chromium nodejs && \
    docker-php-ext-install mysqli pdo pdo_mysql exif && \
    a2enmod headers rewrite
ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium"
$ which node
/usr/bin/node
$ which npm
$

Solution

  • You did not run [sudo] apt update after adding nodesource to the keyring.

    apt update && apt-get install -y zip mariadb-client libmagickwand-dev chromium nodejs && \
    ...
    

    This should work. Otherwise try inspecting the $PATH and check if /usr/local/bin is there, if not add it. You last option (which was not necessary for a long time) is to do sudo apt-get install npm.