如何在Docker中安装/usr/bin/npm?Dockerfile配置修复指引
解决Dockerfile中安装Node.js后缺少npm的问题
方案一:单独安装npm包
修改apt-get install命令,将npm加入安装列表:
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 && \ # 新增npm到安装列表 apt-get install -y zip mariadb-client libmagickwand-dev chromium nodejs npm && \ docker-php-ext-install mysqli pdo pdo_mysql exif && \ a2enmod headers rewrite ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium"
方案二:使用Node.js内置的corepack启用npm
从Node.js 16.x开始,官方内置了corepack工具,可用来管理npm、yarn等包管理器。在安装nodejs后添加对应命令:
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 && \ # 启用corepack并安装npm corepack enable npm && \ docker-php-ext-install mysqli pdo pdo_mysql exif && \ a2enmod headers rewrite ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium"
原因说明
你使用的Node.js 21是非LTS(长期支持)的奇数版本,Nodesource提供的Debian包中,该版本的nodejs包未默认将npm作为依赖项打包,因此需要手动补充安装。如果偏好稳定环境,也可以将NODE_MAJOR改为20(当前LTS版本),此时nodejs包会自动包含npm,无需额外操作。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

