Docker容器中的节点-Sass绑定问题

时间:2019-04-12 11:44:24

标签: node.js docker node-sass

在运行Docker容器时,我的角度应用程序的源代码装载卷存在问题。

我的主机操作系统是Win 10 64位。

这是我的Dockerfile,位于应用程序的根文件夹中。

# base image
FROM node:10

# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app

# install and cache app dependencies
COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install -g @angular/cli@1.7.1
RUN npm install node-sass@latest
RUN npm rebuild node-sass

# add app
COPY . /usr/src/app

# start app
CMD ng serve --host 0.0.0.0 

有关安装和重建Node-sass的行致力于解决问题,也许应该在这里。

所以我开始构建docker容器

docker build -t my-cool-app .

然后运行:我想将源代码从主机装载到容器中:

docker run -it -v ${PWD}:/usr/src/app -v ${PWD}/node_modules -p 4200:4200  my-cool-app

应用程序开始编译,但出现错误。

  

模块构建失败(来自./node_modules/sass-loader/lib/loader.js):   错误:缺少绑定   /usr/src/app/node_modules/node-sass/vendor/linux-x64-64/binding.node   Node Sass找不到您当前环境的绑定:Linux   使用Node.js 10.x的64位

     

找到以下环境的绑定:     -具有Node.js 10.x的Windows 64位

我了解问题:node-sass在Windows主机上以二进制代码构建,并且没有要在Linux中启动的绑定。正如这里https://github.com/sass/node-sass/issues/2165的人所说-嘿,安装后重建node-sass-我向Docker文件添加了此类命令,但仍然失败。

2 个答案:

答案 0 :(得分:0)

我也已经为此战斗了好几天。我终于取得了一些成功。 我需要清理缓存,还需要重建node-sass。 以下是我的Dockerfile:

FROM node:10.13-alpine as build     
WORKDIR /usr/src/app
COPY ["pap-ui/package.json", "/usr/src/app/"]
RUN npm install @angular/cli@7.3.8 -g
RUN npm cache clean --force
RUN npm install --save-dev

COPY . /usr/src/app

WORKDIR /usr/src/app/pap-ui
RUN npm rebuild node-sass --force
RUN npm run build

# Build a small nginx image with static website
FROM nginx:alpine
RUN rm -rf /usr/share/nginx/html/*
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/pap-ui/dist/pap-ui /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

答案 1 :(得分:0)

问题在于,作为第3步的一部分,您正在从本地环境中复制 node_modules 文件夹。请确保创建 .dockerignore 文件并添加node_modules文件夹。完成此操作后,您将无需进行npm重建