如何通过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用户突破权限限制:- 启用特权模式:
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- 以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
相关产品推荐
相关产品推荐

