使用Minikube部署K8s应用时容器文件系统为空问题咨询
问题1原因解答
你使用kompose转换docker-compose配置时,工具虽然提示本地路径不支持、忽略了宿主机路径,但并没有直接删除挂载规则,而是自动生成了一个emptyDir类型的临时卷,并将其挂载到了你指定的/app路径。
容器启动时,这个默认为空的临时卷会直接覆盖镜像内已经通过COPY指令写入内容的/app目录,因此你进入容器查看时目录为空,自然找不到Gemfile等应用文件。
问题2解决方案
根据你的使用场景二选一即可:
场景1:不需要本地代码实时同步,直接使用镜像内置文件
直接编辑生成的k8s.yml文件,找到sofia对应的Deployment配置:
- 删除
volumeMounts字段下mountPath: /app的相关配置 - 删除
volumes字段下对应挂载到/app的卷定义
修改完成后重新执行kubectl apply -f k8s.yml即可,容器会直接加载镜像内部的/app文件。
场景2:需要保留本地代码改动实时同步到容器的能力
需要先将本地目录挂载到minikube节点,再修改K8s配置挂载到容器:
- 首先执行挂载命令,把本地代码目录映射到minikube节点内:
minikube mount /Users/jeeves/git/jeeves/sofia:/host-sofia
- 编辑
k8s.yml中sofia的Deployment配置,将原来的emptyDir卷替换为hostPath类型,指向节点内的挂载路径:
volumes: - name: app-volume hostPath: path: /host-sofia volumeMounts: - name: app-volume mountPath: /app
- 额外注意:minikube默认无法直接读取你本地Docker环境的镜像,需要先将本地构建的镜像加载到minikube内:
minikube image load sofia/sofia:local
配置完成后重新apply资源即可。
内容的提问来源于stack exchange,提问作者abhchand
相关产品推荐
相关产品推荐

