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

如何通过kubectl debug(临时容器)访问Pod中指定容器的文件系统?

解决Kubernetes Pod中PHP容器文件系统访问权限问题

以下是几种可行的解决方法:

  • 直接进入目标PHP容器
    无需使用debug镜像,直接通过kubectl exec进入PHP容器的shell,即可直接访问/app目录(Dockerfile已设置WORKDIR为/app,进入后默认处于该路径):

    POD=$($KUBECTL get pod -lsvc=app,env=production -o jsonpath="{.items[0].metadata.name}")
    kubectl exec -it "$POD" -c php -- zsh -i
    
  • 带权限参数使用kubectl debug
    如果必须通过debug方式访问,可添加特权模式或指定root用户突破权限限制:

    1. 启用特权模式:
    POD=$($KUBECTL get pod -lsvc=app,env=production -o jsonpath="{.items[0].metadata.name}")
    kubectl debug -it --image=mpen/tinker "$POD" --target=php --privileged -- zsh -i
    
    1. 以root用户运行debug容器:
    kubectl debug -it --image=mpen/tinker "$POD" --target=php --user=root -- zsh -i
    

    特权模式会赋予debug容器足够权限访问/proc/1/root,指定root用户则直接绕过普通用户的权限限制。

  • 将容器文件拷贝到本地查看
    若无法直接进入容器,可通过kubectl cp将PHP容器内/app目录的文件拷贝到本地:

    POD=$($KUBECTL get pod -lsvc=app,env=production -o jsonpath="{.items[0].metadata.name}")
    kubectl cp "$POD":/app/ ./local-app-dir -c php
    

    执行后,本地./local-app-dir目录会同步PHP容器内/app的所有文件。

问题原因说明

  • 未加--target=php时,debug容器是Pod内新增的独立容器,/proc/1/root指向的是debug容器自身的根文件系统,而非PHP容器的,因此找不到预期的/app目录。
  • 添加--target=php后,debug容器加入了PHP容器的PID namespace,但由于debug容器默认以非特权用户运行,或Pod存在安全上下文限制,导致无法访问/proc/1/root路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:45:52