![在 Minikube 中挂载本地目录时,当 Pod 使用该文件时会导致“检测到文件系统循环”错误](https://linux22.com/image/792092/%E5%9C%A8%20Minikube%20%E4%B8%AD%E6%8C%82%E8%BD%BD%E6%9C%AC%E5%9C%B0%E7%9B%AE%E5%BD%95%E6%97%B6%EF%BC%8C%E5%BD%93%20Pod%20%E4%BD%BF%E7%94%A8%E8%AF%A5%E6%96%87%E4%BB%B6%E6%97%B6%E4%BC%9A%E5%AF%BC%E8%87%B4%E2%80%9C%E6%A3%80%E6%B5%8B%E5%88%B0%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%BE%AA%E7%8E%AF%E2%80%9D%E9%94%99%E8%AF%AF.png)
我想在 Minikube 中运行 MongoDB,同时将本地目录安装到 pod,以便 MongoDB 可以使用其中的数据。我的数据位于本地 PC 的 ./data 目录中,因此我首先执行了以下操作:
minikube mount ./data:/mnt/mongodata
安装没有问题,我可以使用minikube ssh
然后成功在 minikube 中的 /mnt/mongodata 中找到数据ls /mnt/mongodata
。
接下来我尝试创建持久卷(PV)、持久卷声明(PVC)以及部署和服务,如下所示。
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-vol
labels:
folder: local
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/mongodata"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 512Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo2-deployment
labels:
app: mongo2
spec:
replicas: 1
selector:
matchLabels:
app: mongo2
template:
metadata:
labels:
app: mongo2
spec:
volumes:
- name: mongodata
persistentVolumeClaim:
claimName: mongo-pv-claim
containers:
- name: mongo2db
image: mongo:latest
ports:
- containerPort: 27017
volumeMounts:
- mountPath: "/data/db"
name: mongodata
---
apiVersion: v1
kind: Service
metadata:
name: mongo2-service
spec:
type: LoadBalancer
selector:
app: mongo2
ports:
- protocol: TCP
port: 27017
targetPort: 27017
但是运行之后kubectl apply -f mongo.yaml
,mongo2-deployment pod出现错误,当我使用查看日志时kubectl logs deployment/mongo2-deployment
,错误是:
find: File system loop detected; '/data/db/diagnostic.data' is part of the same file system loop as '/data/db'.
当我尝试不挂载本地目录或更改挂载路径(例如“/data/db2”)时,pod 运行正常。我猜想在这种情况下 MongoDB 会在 /data/db 目录中生成一个默认数据库,但这样我就无法访问我的数据了。
为什么挂载不成功并导致文件系统循环错误?我猜挂载应该“覆盖”原始 /data/db 目录(如果有的话)。我应该怎么做才能解决这个问题?