为何使用kubectl run启动nginx容器时无法在容器内创建文件?
问题原因排查
- 同名Pod冲突:首次执行
kubectl run test-nginx --restart=Never --image nginx:alpine -- /bin/sh -c "ls"后,集群中已经存在名为test-nginx的Pod资源,未清理的情况下再次执行同名创建命令会直接抛出冲突错误,这是最高频的触发原因。 - 目录权限不足:清理旧Pod后仍报错的话,是官方
nginx:alpine镜像默认以普通用户nginx(UID 101)运行,默认工作目录为根目录/,普通用户无根目录写入权限,直接执行touch index.txt写入根目录会触发权限拒绝。 - 状态误判:
--restart=Never配置的Pod执行完指定命令后会正常进入Completed终止状态,只有STATUS列显示Error、CrashLoopBackOff才属于执行失败,Completed为预期正常状态。
解决操作方案
- 执行清理命令避免同名冲突:
kubectl delete pod test-nginx --ignore-not-found=true - 调整权限或写入路径:
方案1:写入nginx用户默认有权限的临时目录:kubectl run test-nginx --restart=Never --image nginx:alpine -- /bin/sh -c "touch /tmp/index.txt"
方案2:指定root用户运行,可写入任意目录:kubectl run test-nginx --restart=Never --image nginx:alpine --user 0 -- /bin/sh -c "touch index.txt" - 如需容器创建文件后保持运行,修改启动命令阻止进程退出:
kubectl run test-nginx --restart=Always --image nginx:alpine --user 0 -- /bin/sh -c "touch index.txt && nginx -g 'daemon off;'"
内容的提问来源于stack exchange,提问作者Akshay Awate
相关产品推荐
相关产品推荐

