首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >共享卷的minikube/k8s上docker容器中的Node-Sass不受支持的版本

共享卷的minikube/k8s上docker容器中的Node-Sass不受支持的版本
EN

Stack Overflow用户
提问于 2019-04-12 02:26:36
回答 1查看 206关注 0票数 0

我正在将一个node/react/webpack应用程序移植到k8s,并且正在尝试配置一个利用webpack的热重载特性的开发环境。在minikube上使用共享卷运行此命令时遇到错误:

代码语言:javascript
复制
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>提供页面

代码语言:javascript
复制
#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

其中package.json中的dev-dockerNODE_ENV=development npm run -- webpack --progress --hot --watch

在下面的代码中,注释掉volumeMounts键可以消除错误。

代码语言:javascript
复制
# 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

根据我在其他地方的发现,我认为当引入共享卷时,node-sass使用的操作系统本地绑定正在干扰主机和容器之间的关系。也就是说,映像构建过程会创建适用于容器的绑定,但在挂载共享卷时会覆盖这些绑定。

这种理解是正确的吗?我如何以最好的方式组织事情,以便开发人员可以在其本地代码库上工作,并在集群实例中自动看到这些更改,而无需重新构建镜像?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 02:39:47

我的假设得到了证实--节点模块是为容器构建的,但被volumeMount覆盖了。在这一点上,最有效的方法是将需求构建作为容器的入口点,这样它将在容器启动时运行,而不是仅在构建时运行。

代码语言:javascript
复制
# Dockerfile

CMD RUN yarn cache clean && yarn install --non-interactive --force && npm run dev-docker
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55638997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档