.NET 8 Docker入口脚本中root切换非root用户异常问题
问题原因与解决方案
核心问题
你的.NET 8 Dockerfile没有创建app:app这个非root用户,而.NET 7的Dockerfile里手动执行了用户创建命令。当入口脚本运行su-exec app:app dotnet server.dll时,因为目标用户不存在,su-exec会直接以当前的root用户继续运行后续命令,导致应用始终以root启动,exec进入容器后自然显示root。
修复步骤
在.NET 8的Dockerfile中添加创建app用户和用户组的命令,和.NET 7的配置保持一致:
修改后的.NET 8 Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:8.0.0-alpine3.18-amd64 AS final # 创建非root用户组和用户 RUN addgroup --gid 1000 -S app && adduser --uid 1000 -S app -G app WORKDIR /app RUN apk add --no-cache tini=0.19.0-r1 su-exec=0.2-r3 COPY entrypoint.sh / RUN chmod 755 /entrypoint.sh ENTRYPOINT ["/sbin/tini", "--", "/entrypoint.sh"] COPY --from=publish /app .
验证方法
可以在Dockerfile中添加RUN id app命令,构建镜像时如果能正常输出用户信息,说明用户创建成功;如果报错,则说明用户未被正确创建。
内容的提问来源于stack exchange,提问作者Eitan
相关产品推荐
相关产品推荐

