在AKS集群部署容器时遇containerd挂载错误:找不到/etc/passwd文件
AKS部署containerd挂载/etc/passwd失败的解决方案
错误原因
该错误是containerd在创建容器临时挂载点时,无法读取容器内的/etc/passwd文件,大概率和镜像完整性、节点containerd运行状态或部署配置冲突有关。
修复步骤
1. 校验镜像完整性
- 先验证基础镜像是否正常:
如果输出为空或报错,说明基础镜像损坏,换镜像源重新拉取。docker pull mcr.microsoft.com/dotnet/aspnet:6.0 docker run --rm mcr.microsoft.com/dotnet/aspnet:6.0 cat /etc/passwd - 检查你构建的业务镜像:
如果业务镜像缺少该文件,排查构建上下文是否有docker build -t worker-service . docker run --rm worker-service cat /etc/passwdetc目录被错误复制到容器根目录,或者调整Dockerfile的COPY路径(确保只复制/app下的内容)。
2. 检查AKS节点containerd状态
- 登录AKS节点(需开启节点SSH访问),检查临时挂载目录权限:
权限需为ls -ld /var/lib/containerd/tmpmounts/root:root,权限值至少700。 - 重启containerd服务:
sudo systemctl restart containerd
3. 排查部署YAML配置
- 检查Deployment中是否有自定义
volumeMounts挂载了/etc/passwd或覆盖容器根目录,这类配置会导致系统文件被替换。 - 检查
securityContext配置,确保runAsUser/fsGroup设置正确,避免因权限问题无法读取系统文件。
4. 重建节点池
若以上操作无效,可能是AKS节点基础镜像存在问题,删除现有节点池并创建新的节点池,选择官方推荐的节点镜像。
内容的提问来源于stack exchange,提问作者dilraj bhinder
相关产品推荐
相关产品推荐

