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

Kubernetes挂载Persistent Volume后找不到start.sh问题排查

问题原因

你直接将Persistent Volume挂载到/home/django/目录,会完全覆盖容器镜像中原有的该目录内容。由于PV初始状态为空,原本存在于镜像/home/django/下的start.sh被覆盖,导致容器启动时找不到脚本。

解决方案

方案1:挂载子目录(推荐)

通常Django应用仅需持久化特定子目录(如静态文件、媒体文件、数据存储目录),无需挂载整个/home/django/。修改Deployment的volumeMounts配置,只挂载需要持久化的子目录:

volumeMounts:
- name: django-persistent-storage
  mountPath: /home/django/static  # 替换为实际需要持久化的子目录,比如media、data等
- name: django-persistent-storage
  mountPath: /home/django/media   # 可添加多个需要持久化的子目录
volumes:
- name: django-persistent-storage
  persistentVolumeClaim:
    claimName: django-pv-claim

此方式不会覆盖原目录下的start.sh,容器可正常启动,同时实现指定内容的持久化。

方案2:必须挂载整个/home/django/的处理

如果业务需求要求挂载整个目录,需将镜像中的start.sh同步到PV中:

  1. 启动临时Pod挂载目标PVC,用于复制脚本:
    kubectl run temp-pod --image=busybox -it --rm --volume=name=django-persistent-storage,persistentVolumeClaim=claimName=django-pv-claim
    
  2. 进入临时Pod后,将start.sh内容写入PV目录,并赋予执行权限:
    # 粘贴原镜像中start.sh的内容到此处
    cat > /home/django/start.sh << 'EOF'
    # 原start.sh的脚本内容
    EOF
    chmod +x /home/django/start.sh
    
    也可先启动一个不挂载PV的Pod,用kubectl cp将原镜像中的start.sh拷贝到本地,再拷贝到临时Pod的PV目录中。
迁移到Persistent Volume的正确步骤
  • 明确容器内需要持久化的具体路径,避免直接挂载应用根目录
  • 配置Deployment挂载对应子目录到PV
  • 首次使用PV时,同步容器中原有的持久化内容到PV(如静态文件、数据库文件)
  • 启动Pod后查看日志,验证应用是否正常运行

内容的提问来源于stack exchange,提问作者MrTux01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:07