M1 Mac下执行docker-compose up --build构建容器报node-sass/node-gyp错误
问题描述
长期执行docker-compose up --build命令构建Docker容器时,每次执行都会抛出大量错误,报错信息中频繁出现与node-sass、node-gyp相关的构建失败提示,已检索所有匹配的错误组合仍未找到解决方案。
系统环境
- MacOS 11.2.3(MacBook Pro M1 机型)
- Node 15.0.0
- Docker 3.3.1
执行命令
docker-compose up --build
Dockerfile 配置
# 基于官方Node基础镜像 FROM node # 配置客户端工作环境 WORKDIR /usr/src/app/client # 复制客户端依赖配置文件 COPY ./client/package*.json ./ # 安装客户端依赖 RUN npm install # 复制客户端核心源码与配置文件 COPY ./client/src ./src COPY ./client/tsconfig.json ./tsconfig.json COPY ./client/babel.config.js ./babel.config.js COPY ./client/.eslintrc.json ./.eslintrc.json # 执行客户端生产构建 RUN npm run build # 配置服务端工作环境 WORKDIR /usr/src/app/server # 复制服务端依赖配置文件 COPY ./server/package*.json ./ # 安装服务端依赖 RUN npm install # 复制服务端核心源码与配置文件 COPY ./server/src ./src COPY ./server/database ./database COPY ./server/tests ./tests COPY ./server/tsconfig.json ./tsconfig.json COPY ./server/knexfile.ts ./knexfile.ts # 暴露服务端口 EXPOSE 3000 # 定义容器启动命令 CMD ["npm","run","dev"]
docker-compose.yml 配置
version: "3.9" services: app: build: . ports: - "3000:3000" - "9229:9229" environment: NODE_ENV: development SESSION_SECRET: a_secret REDIS_SECRET: a_secret JWT_SECRET: a_secret DB_USER: a_user DB_PASSWORD: a_password DB_NAME: a_database DB_HOST: db DB_CLIENT: pg env_file: - ./server/.env - ./client/.env volumes: - ./client/dist:/usr/src/app/client/dist - ./server/src:/usr/src/app/server/src - ./server/database:/usr/src/app/server/database - ./server/tests:/usr/src/app/server/tests db: image: "postgres" restart: always environment: POSTGRES_USER: a_user POSTGRES_PASSWORD: a_password POSTGRES_DB: a_redis ports: - "5432:5432" redis: image: "redis:alpine" command: redis-server --requirepass some_pass volumes: - ./server/redis.conf:/usr/local/etc/redis/redis.conf environment: REDIS_REPLICATION_MODE: master
部分错误输出
注:完整输出过长,无法全部粘贴
% docker-compose up --build Docker Compose 已内置在 Docker CLI 中,可直接尝试运行 docker compose up 正在构建 app [+] Building 89.5s (8/21) => [internal] 加载Dockerfile构建定义 => => 传输dockerfile: 91B => [internal] 加载 .dockerignore 配置 => => 传输上下文: 2B => [internal] 拉取 docker.io/library/node:latest 镜像元数据 => [internal] 加载构建上下文 => => 传输上下文: 15.26kB => [ 1/17] 基于 docker.io/library/node 镜像生成构建层 => CACHED [ 2/17] 设置工作目录 /usr/src/app/client => CACHED [ 3/17] 复制 ./client/package*.json 到容器内工作目录 => ERROR [ 4/17] 执行 npm install 耗时89.4s ------ > 构建步骤[4/17] 执行 npm install: #8 33.75 npm 警告:chokidar@2.1.8 已过时,该版本在Node 14+环境下会出现兼容问题,建议升级至chokidar 3,可缩减15倍依赖体积 #8 34.31 npm 警告:urix@0.1.0 已停止维护 #8 34.41 npm 警告:resolve-url@0.2.1 已停止维护 #8 34.91 npm 警告:har-validator@5.1.5 已停止维护 #8 38.60 npm 警告:@hapi/topo@3.1.6 已过时,不再提供技术支持与维护 #8 38.62 npm 警告:@hapi/bourne@1.3.2 已过时,不再提供技术支持与维护 #8 39.38 npm 警告:@hapi/address@2.1.4 已迁移至独立包 @sideway/address #8 39.43 npm 警告:@hapi/hoek@8.5.1 已过时,不再提供技术支持与维护 #8 39.88 npm 警告:request@2.88.2 已停止维护 #8 39.90 npm 警告:chokidar@2.1.8 已过时,该版本在Node 14+环境下会出现兼容问题,建议升级至chokidar 3,可缩减15倍依赖体积 #8 40.29 npm 警告:eslint-loader@2.2.1 已过时,建议使用 eslint-webpack-plugin #8 40.65 npm 警告:html-webpack-plugin@3.2.0 3.x版本已不再提供支持 #8 41.26 npm 警告:@hapi/joi@15.1.1 已迁移至独立包 joi #8 42.21 npm 警告:babel-eslint@10.1.0 已升级为 @babel/eslint-parser,原包不再接收版本更新 #8 89.28 npm 系统提示 #8 89.28 npm 系统提示:检测到当前npm 7.10.0可升级至7.11.2 #8 89.28 npm 系统提示:可运行 npm install -g npm@7.11.2 完成版本升级 #8 89.28 npm 错误码: 1 #8 89.28 npm 错误路径: /usr/src/app/client/node_modules/node-sass #8 89.28 npm 错误: 命令执行失败 #8 89.28 npm 错误: 触发失败的命令为 sh -c node scripts/build.js #8 89.28 npm 错误: 构建执行命令: /usr/local/bin/node /usr/src/app/client/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library= #8 89.28 npm 错误: make: 进入构建目录 '/usr/src/app/client/node_modules/node-sass/build'
内容的提问来源于stack exchange,提问作者lost_programmer
相关产品推荐
相关产品推荐

