docker打包node项目node-sass问题

想打包我的node项目,但是一直出node-sass的错误
第一步:打包一个base镜像,下载镜像中package.json中的依赖包
dockerfile:

FROM node:10.14.1-alpine
MAINTAINER gstorms

ENV TZ Asia/Shanghai
ARG registry=https://registry.npm.taobao.org
RUN yarn config set registry ${registry}

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json ./
RUN yarn
RUN npm rebuild node-sass --force

COPY . /usr/src/app

CMD ["yarn", "start"]

第二步:基于这个镜像,打包项目:
dockerfile:

FROM gstorms/node-base:1.3

WORKDIR /usr/src/app
COPY . /usr/src/app

CMD ["yarn", "start"]

使用docker-compose操作,但是执行up的时候node-sass一直出错:

ERROR in ./src/app/app.component.scss
fronta_1  | Module build failed (from ./node_modules/sass-loader/lib/loader.js):
fronta_1  | Error: Missing binding /usr/src/app/node_modules/node-sass/vendor/linux_musl-x64-64/binding.node
fronta_1  | Node Sass could not find a binding for your current environment: Linux/musl 64-bit with Node.js 10.x
fronta_1  |
fronta_1  | Found bindings for the following environments:
fronta_1  |   - Windows 64-bit with Node.js 10.x
fronta_1  |
fronta_1  | This usually happens because your environment has changed since running `npm install`.
fronta_1  | Run `npm rebuild node-sass` to download the binding for your current environment.
fronta_1  |     at module.exports (/usr/src/app/node_modules/node-sass/lib/binding.js:15:13)
fronta_1  |     at Object.<anonymous> (/usr/src/app/node_modules/node-sass/lib/index.js:14:35)
fronta_1  |     at Module._compile (internal/modules/cjs/loader.js:688:30)
fronta_1  |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
fronta_1  |     at Module.load (internal/modules/cjs/loader.js:598:32)
fronta_1  |     at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
fronta_1  |     at Function.Module._load (internal/modules/cjs/loader.js:529:3)
fronta_1  |     at Module.require (internal/modules/cjs/loader.js:636:17)
fronta_1  |     at require (internal/modules/cjs/helpers.js:20:18)
fronta_1  |     at Object.sassLoader (/usr/src/app/node_modules/sass-loader/lib/loader.js:46:72)

package.json(部分):

{
  "name": "fronta",
  "version": "1.0.0",
  "scripts": {
    ...
  },
  "private": true,
  "dependencies": {
    ...
    "node-sass": "^4.12.0",
    ...
  },
  "devDependencies": {
   ...
  }
}

本机:win10
docker: docker desktop for windows
这个不知道怎么解决了,求大神指教。

阅读 4.1k
1 个回答

知道什么原因了
我是用docker-compose编排构建的,在docker-compose.yml文件中进行文件挂载的时候将整个项目目录(包含node_modules目录)挂载了上去,运行项目的时候本机(windows)的目录将容器中的目录覆盖了,所以找不到对应系统(容器是Linux)的binding.node文件

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进