You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地K8s部署Node-RED读取文件遇ENOENT错误的解决方案咨询

Node-RED在Minikube中读取本地文件的解决方案

问题场景

我在本地Minikube的Kubernetes环境中部署了Node-RED,部署配置如下。尝试读取本地目录的D:\SHRDC\abss\test.txt文件时,报错:Error: ENOENT: no such file or directory, open 'D:\SHRDC\abss\test.txt',改用路径/data/test.txt也无法读取,求可行的解决方案。

部署配置YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nodered
  name: nodered
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodered
  template:
    metadata:
      labels:
        app: nodered
    spec:
      containers:
      - name: nodered
        image: nodered/node-red:latest
        resources:
          requests:
            memory: 256Mi
            cpu: "0.2"
          limits:
            memory: 512Mi
            cpu: "1"
        ports:
        - containerPort: 1880
        volumeMounts:
        - name: nodered-claim
          mountPath: /data/nodered
          # subPath: nodered <-- not needed in your case
      volumes:
      - name: nodered-claim
        persistentVolumeClaim:
          claimName: nodered-claim
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: small-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nodered-claim
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate
---
apiVersion: v1
kind: Service
metadata:
  name: node-red-service
spec:
  type: LoadBalancer
  selector:
    app: nodered
  ports:
    - port: 1880
      targetPort: 1880

问题原因

  1. 容器无法直接访问宿主机Windows路径:Node-RED运行在Minikube的虚拟机容器内,不能直接读取宿主机D盘的文件,必须通过Kubernetes的本地持久卷(Local PV)做目录映射。
  2. 路径映射不匹配:当前PV映射的是Minikube节点内部的/data目录,而非宿主机的D:\SHRDC\abss;同时容器内挂载路径是/data/nodered,所以直接用/data/test.txt找不到文件。

解决方案

步骤1:把宿主机文件同步到Minikube节点

Minikube是虚拟机,先把宿主机的test.txt复制到Minikube节点的/data目录(对应PV的路径):

minikube cp D:\SHRDC\abss\test.txt minikube:/data/test.txt

步骤2:调整容器挂载路径(按需选择)

如果想在Node-RED中直接用/data/test.txt访问文件,修改Deployment里的volumeMounts,把挂载路径从/data/nodered改成/data:

# 修改Deployment.spec.containers.volumeMounts部分
volumeMounts:
- name: nodered-claim
  mountPath: /data  # 原路径为/data/nodered,替换为/data

修改后重新应用配置:

kubectl apply -f <你的部署文件名>.yaml

如果保持原挂载路径/data/nodered,则需要把文件同步到Minikube节点的/data/nodered目录:

minikube cp D:\SHRDC\abss\test.txt minikube:/data/nodered/test.txt

步骤3:Node-RED中使用正确路径

  • 若挂载路径为/data:文件在容器内的路径是/data/test.txt,直接在Node-RED的文件节点中填入该路径。
  • 若挂载路径为/data/nodered:文件路径为/data/nodered/test.txt。

验证方法

进入容器确认文件存在:

# 获取Pod名称
kubectl get pods
# 进入容器
kubectl exec -it <nodered-pod-name> /bin/bash
# 查看文件(根据挂载路径调整)
ls /data
cat /data/test.txt
# 或者
ls /data/nodered
cat /data/nodered/test.txt

内容的提问来源于stack exchange,提问作者Quazi Afnan Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:40:28