You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建Docker容器时出现‘Error executing command’错误如何解决?

问题描述

执行docker-compose build时遇到以下错误:

#0 3.997 ## Installing packages required for setup: lsb-release gnupg...
#0 3.997 + apt-get install -y lsb-release gnupg > /dev/null 2>&1
#0 12.91 Error executing command, exiting
------
failed to solve: executor failed running [/bin/sh -c curl -fsSL      https://deb.nodesource.com/setup_18.x | bash - && apt-get install -y nodejs]: exit code: 1

对应的Dockerfile如下:

FROM php:8.2-fpm

RUN apt-get update && apt-get install -y \
    apt-utils\
    libpq-dev\
    libpng-dev\
    libzip-dev\
    libjpeg-dev\
    zip unzip \
    git && \
    docker-php-ext-install pdo_mysql && \
    docker-php-ext-configure gd --with-jpeg && \
    docker-php-ext-install -j$(nproc) gd zip && \
    docker-php-ext-install bcmath && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

 COPY ./.docker/app/php.ini /usr/local/etc/php/conf.d/php.ini

 COPY app /var/www/app
 COPY bootstrap /var/www/bootstrap
 COPY config /var/www/config
 COPY database /var/www/database
 COPY public /var/www/public
 COPY resources /var/www/resources
 COPY routes /var/www/routes
 COPY storage /var/www/storage
 COPY artisan /var/www/artisan
 COPY package.json /var/www/package.json
 COPY vite.config.js /var/www/vite.config.js

 COPY composer.* ./

 RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
    apt-get install -y nodejs

 RUN npm install -g npm

 ENV COMPOSER_ALLOW_SUPERUSER=1
 RUN curl -sS https://getcomposer.org/installer | php -- \
    --filename=composer \
    --install-dir=/usr/local/bin

RUN composer install \
    --no-interaction \
    --no-plugins\
    --no-suggest \
    --no-scripts \
    --no-autoloader \
    --prefer-dist

RUN composer dump-autoload --no-scripts --optimize && \
    chown -R root:www-data /var/www && \
    chmod 755 -R /var/www && \
    chmod -R 775 /var/www/storage && \
    chmod -R 775 /var/www/bootstrap/cache

WORKDIR /var/www

已尝试更换Node.js版本、清理缓存重建容器、手动安装gnupg,但问题依旧。

解决方案

错误核心原因:

  1. 第一次RUN指令结尾执行了apt-get clean && rm -rf /var/lib/apt/lists/*,清空了APT源缓存列表,后续执行apt-get install时无可用源数据,导致安装依赖失败。
  2. NodeSource脚本默认重定向输出到/dev/null,屏蔽了具体错误信息,无法排查细节。

针对问题,提供两种调整方案:

方案1:将Node.js安装整合到第一次APT操作阶段

把Node.js安装步骤移到第一次apt-get操作中,避免重复清理缓存,同时提前安装脚本所需依赖:

FROM php:8.2-fpm

# 先安装所有基础依赖,包括Node.js脚本需要的lsb-release、gnupg、curl
RUN apt-get update && apt-get install -y \
    apt-utils\
    libpq-dev\
    libpng-dev\
    libzip-dev\
    libjpeg-dev\
    zip unzip \
    git \
    lsb-release \
    gnupg \
    curl && \
    # 安装PHP扩展
    docker-php-ext-install pdo_mysql && \
    docker-php-ext-configure gd --with-jpeg && \
    docker-php-ext-install -j$(nproc) gd zip && \
    docker-php-ext-install bcmath && \
    # 执行NodeSource脚本并安装Node.js
    curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
    apt-get install -y nodejs && \
    # 更新npm
    npm install -g npm && \
    # 清理缓存
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

 COPY ./.docker/app/php.ini /usr/local/etc/php/conf.d/php.ini

 COPY app /var/www/app
 COPY bootstrap /var/www/bootstrap
 COPY config /var/www/config
 COPY database /var/www/database
 COPY public /var/www/public
 COPY resources /var/www/resources
 COPY routes /var/www/routes
 COPY storage /var/www/storage
 COPY artisan /var/www/artisan
 COPY package.json /var/www/package.json
 COPY vite.config.js /var/www/vite.config.js

 COPY composer.* ./

 ENV COMPOSER_ALLOW_SUPERUSER=1
 RUN curl -sS https://getcomposer.org/installer | php -- \
    --filename=composer \
    --install-dir=/usr/local/bin

RUN composer install \
    --no-interaction \
    --no-plugins\
    --no-suggest \
    --no-scripts \
    --no-autoloader \
    --prefer-dist

RUN composer dump-autoload --no-scripts --optimize && \
    chown -R root:www-data /var/www && \
    chmod 755 -R /var/www && \
    chmod -R 775 /var/www/storage && \
    chmod -R 775 /var/www/bootstrap/cache

WORKDIR /var/www

方案2:在安装Node.js前重新更新APT缓存

若不想调整步骤顺序,可在安装Node.js前重新执行apt-get update,并提前安装依赖,同时去掉脚本的输出屏蔽以便排查:

# ... 前面的步骤保持不变 ...

 COPY composer.* ./

 # 重新更新APT缓存,安装脚本依赖,去掉输出屏蔽以便排查错误
 RUN apt-get update && apt-get install -y lsb-release gnupg curl && \
    curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
    apt-get install -y nodejs && \
    # 清理本次操作的缓存
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

 RUN npm install -g npm

 # ... 后面的步骤保持不变 ...
关键调整点
  • 确保执行NodeSource脚本前,APT源列表可用(要么未清理过,要么重新执行了apt-get update)。
  • 提前安装脚本依赖:lsb-release、gnupg、curl,避免脚本自动安装时出错。
  • 去掉脚本的>/dev/null 2>&1重定向,若再出错可查看具体错误日志,方便进一步排查。

内容的提问来源于stack exchange,提问作者pavel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:32:44