Проблема привязки Node-sass в контейнере Docker - PullRequest
3 голосов
/ 12 апреля 2019

Существует проблема с монтированием тома с исходным кодом моего углового приложения в работающем контейнере 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 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 Узлу Sass не удалось найти привязку для вашей текущей среды: Linux 64-битный с Node.js 10.x

Найдены привязки для следующих сред: - Windows 64-bit с Node.js 10.x

Я понимаю проблему: node-sass собирается на хосте Windows в виде двоичного кода, и в Linux нет привязки для запуска. Ребята отсюда https://github.com/sass/node-sass/issues/2165 сказали - эй, переустановите node-sass после установки - я добавил такие команды в файл Docker, но все равно не получилось.

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Проблема заключается в том, что вы копируете папку node_modules из локальной среды как часть шага 3. Убедитесь, что вы создали .dockerignore файл и добавили папку node_modules.Как только вы это сделаете, вам не нужно делать npm rebuild

0 голосов
/ 03 мая 2019

Я также боролся с этим в течение нескольких дней.Я наконец-то добился определенного успеха.Мне нужно было очистить кеш, а также пересобрать 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;"]
...