Cloud Run Job随机出现‘User not found in /etc/passwd’错误求助
Cloud Run Job 随机出现用户未找到错误的解决思路
我在执行Cloud Run Job时,使用同一容器镜像,却有不到5%的执行会随机出现如下错误:
Application failed to start: resolveUserIdentity("1001"): User not found in file /etc/passwd
我的Dockerfile内容如下:
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.7 RUN microdnf install freetype fontconfig \ && microdnf clean all WORKDIR /work/ RUN chown 1001 /work \ && chmod "g+rwX" /work \ && chown 1001:root /work COPY --chown=1001:root target/*.properties target/*.so /work/ COPY --chown=1001:root target/*-runner /work/application EXPOSE 8080 USER 1001 CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
解决思路
提前创建UID为1001的用户:当前UBI镜像默认可能没有该UID对应的用户条目,Cloud Run偶尔会出现用户映射异常。在Dockerfile中添加创建用户的命令:
RUN useradd -u 1001 -g 0 -m appuser之后保持
USER 1001即可,确保/etc/passwd中存在该用户的固定条目。启动时动态添加用户条目:针对Cloud Run运行时可能修改
/etc/passwd的情况,用启动脚本补全用户信息:- 创建
start.sh脚本:#!/bin/sh echo "1001:x:1001:0:App User:/work:/sbin/nologin" >> /etc/passwd exec ./application -Dquarkus.http.host=0.0.0.0 - 修改Dockerfile,复制脚本并赋予执行权限:
COPY --chown=1001:root start.sh /work/ RUN chmod +x /work/start.sh CMD ["./start.sh"]
每次启动都会强制确保用户条目存在。
- 创建
临时切换为root运行排查:如果业务允许,暂时将
USER 1001改为USER root,验证错误是否消失。若问题不再出现,可确认是用户映射导致的问题,再针对性优化。(注意生产环境不建议长期用root运行)检查Cloud Run Job配置:确认Job是否设置了自定义服务账号或用户映射参数,部分配置可能会覆盖容器内的用户设置,排查是否存在身份配置冲突。
内容的提问来源于stack exchange,提问作者SidiBecker
相关产品推荐
相关产品推荐

