Docker容器中的Node-sass绑定问题

Posted

技术标签:

【中文标题】Docker容器中的Node-sass绑定问题【英文标题】:Node-sass binding problem in Docker container 【发布时间】:2019-09-03 04:13:23 【问题描述】:

在运行 Docker 容器时使用我的 Angular 应用程序的源代码安装卷存在问题。

我的主机操作系统是 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 64 位 Node.js 10.x

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

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

【问题讨论】:

【参考方案1】:

问题在于,作为步骤 3 的一部分,您要从本地环境中复制 node_modules 文件夹。确保创建 .dockerignore 文件并添加 node_modules 文件夹.一旦你这样做了,你就不需要做 npm rebuild

【讨论】:

【参考方案2】:

我也为此奋斗了好几天。我终于取得了一些成功。 我需要清理缓存并重建 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;"]

【讨论】:

以上是关于Docker容器中的Node-sass绑定问题的主要内容,如果未能解决你的问题,请参考以下文章

错误缺少绑定 app/nodes_modules/node-sass

docker容器操作

Docker应用注册dubbo ip 的问题

在 Windows 主机上的 docker 容器内更改挂载文件夹中的文件权限

node-sass 和 Docker 的问题

运行 gulp 时出错,缺少绑定,node-sass 找不到绑定