Неподдерживаемая версия Node-Sass в Docker-контейнере на Minikube / K8s с общим томом - PullRequest
0 голосов
/ 11 апреля 2019

Я портирую приложение узла / реагирования / веб-пакета на k8s и пытаюсь настроить среду разработки, которая использует функцию горячей перезагрузки веб-пакета.Я получаю сообщение об ошибке при запуске этого с общим томом на minikube:

ERROR in ./~/css-loader!./~/sass-loader/lib/loader.js?{"data":"$primary: #f9427f;$secondary: #171735;$navbar-back-rotation: 0;$navbar-link-rotation: 0;$login-background: url('/images/login-background.jpg');$secondary-background: url('/images/secondary-bg.jpg');"}!./src/sass/style.sass
Module build failed: Error: Node Sass does not yet support your current environment: Linux 64-bit with Unsupported runtime (67)
For more information on which environments are supported please see:

Запуск кода в контейнере сам (в основном) работает - он запускается без ошибок и обслуживает страницучерез docker run -it --rm --name=frontend --publish=3000:3000 <container hash>

#Dockerfile

FROM node:latest
RUN mkdir /code
ADD . /code/
WORKDIR /code/
RUN yarn cache clean && yarn install --non-interactive  && npm rebuild node-sass

CMD npm run dev-docker

, где dev-docker в package.json равно NODE_ENV=development npm run -- webpack --progress --hot --watch

В дальнейшем, комментирование клавиши volumeMounts устраняет ошибку.

# deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: dev
  name: web
  labels:
    app: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: frontend-container
  template:
    metadata:
      labels:
        app: frontend-container
    spec:
      volumes:
      - name: frontend-repo
        hostPath:
          path: /Users/me/Projects/code/frontend
      containers:
        - name: web-container
          image: localhost:5000/react:dev
          ports:
          - name: http
            containerPort: 3000
            protocol: TCP
          volumeMounts:
          - name: frontend-repo
            mountPath: /code
          env:
           ... # redacted for simplicity, assume works

Основываясь на том, что я нашел в другом месте, я считаю, что os-native связывание, используемое node-sass, создает помехи между хостом и контейнером, когда вводится общий том.То есть процесс построения образа создает привязки, которые будут работать для контейнера, но они перезаписываются при монтировании общего тома.

Правильно ли это понимание?Как лучше всего структурировать вещи так, чтобы разработчик мог работать над своим локальным репо и видеть, что эти изменения автоматически отражаются в экземпляре кластера, без перекомпоновки образов?

1 Ответ

1 голос
/ 16 апреля 2019

Моя гипотеза подтвердилась - модули узлов создавались для контейнера, но перезаписывались volumeMount. Подход, который работал лучше всего на этом этапе, заключался в том, чтобы сделать сборку требований в качестве точки входа контейнера, чтобы она работала при запуске контейнера, а не только во время сборки.

# Dockerfile

CMD RUN yarn cache clean && yarn install --non-interactive --force && npm run dev-docker
...