minikube/k8s 上具有共享卷的 docker 容器中的 Node-Sass 版本不受支持
Node-Sass unsupported version in docker container on minikube/k8s with shared volume
我正在将一个 node/react/webpack 应用程序移植到 k8s,并且正在尝试配置一个利用 webpack 的热重载功能的开发环境。当 运行 这与 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:
运行 容器中的代码本身 (mostly) 工作——它启动时没有错误并通过 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
其中 package.json
中的 dev-docker
是 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
根据我在其他地方发现的内容,我相信 node-sass
使用的 os-native 绑定在共享卷是介绍。也就是说,映像构建过程会创建适用于容器的绑定,但是 ose 在挂载共享卷时会被覆盖。
这个理解对吗?我如何最好地构建事物,以便开发人员可以处理他们的本地存储库并看到 ose 更改自动反映在集群实例中,而无需重建图像?
我的假设得到证实——正在为容器构建节点模块,但被 volumeMount
覆盖。在这一点上最有效的方法是将需求构建作为容器的入口点,这样它就会 运行 当容器启动时,而不是仅在构建时。
# Dockerfile
CMD RUN yarn cache clean && yarn install --non-interactive --force && npm run dev-docker
我正在将一个 node/react/webpack 应用程序移植到 k8s,并且正在尝试配置一个利用 webpack 的热重载功能的开发环境。当 运行 这与 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:
运行 容器中的代码本身 (mostly) 工作——它启动时没有错误并通过 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
其中 package.json
中的 dev-docker
是 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
根据我在其他地方发现的内容,我相信 node-sass
使用的 os-native 绑定在共享卷是介绍。也就是说,映像构建过程会创建适用于容器的绑定,但是 ose 在挂载共享卷时会被覆盖。
这个理解对吗?我如何最好地构建事物,以便开发人员可以处理他们的本地存储库并看到 ose 更改自动反映在集群实例中,而无需重建图像?
我的假设得到证实——正在为容器构建节点模块,但被 volumeMount
覆盖。在这一点上最有效的方法是将需求构建作为容器的入口点,这样它就会 运行 当容器启动时,而不是仅在构建时。
# Dockerfile
CMD RUN yarn cache clean && yarn install --non-interactive --force && npm run dev-docker