GitHub Actions自托管Windows Runner构建Dockerfile遇ContainerUser找不到错误
检查Docker版本与Windows容器模式
确认Runner上的Docker是否切换到Windows容器模式(默认可能是Linux容器),同时验证Docker Engine版本是否适配你使用的Nano Server镜像版本。可以在GitHub Actions步骤中添加docker version和docker info命令,查看输出中的Server OS和Engine Version信息,确保与基础镜像的Windows版本匹配(比如Nano Server 2022需要Docker Engine支持Windows Server 2022)。验证宿主Windows版本与Nano镜像版本兼容性
Windows容器要求宿主系统版本与镜像版本严格匹配(比如宿主是Windows Server 2019,不能使用基于Nano Server 2022的基础镜像)。检查Dockerfile中的基础镜像标签,比如mcr.microsoft.com/dotnet/core/runtime:6.0-nanoserver-ltsc2019,确认ltsc2019与Runner的Windows宿主版本一致。检查Windows容器隔离模式配置
若Runner的Docker使用process隔离模式,需确认宿主系统支持该模式且配置正确。部分环境可能因禁用用户隔离导致无法识别ContainerUser/ContainerAdministrator这类内置容器用户。可通过docker info查看Isolation字段的值,若为hyperv,需确认Hyper-V服务正常运行。排查Runner服务账号权限
运行GitHub Actions的Runner服务账号可能缺少操作Windows容器的必要权限,比如SeManageVolumePrivilege。可要求Runner管理员确认账号是否具备该权限,或尝试在构建步骤中使用runas命令以管理员身份执行Docker build。最小化Dockerfile测试
编写极简测试Dockerfile定位问题:FROM mcr.microsoft.com/dotnet/core/runtime:6.0-nanoserver-ltsc2019 RUN echo "test"在Runner上构建该镜像,若仍报错,说明问题出在基础镜像与Runner环境的兼容性,而非项目代码或构建参数。
排查第三方安全软件干扰
企业环境中的杀毒软件、EDR工具可能拦截Windows容器的用户操作,导致内置用户无法被识别。可要求Runner管理员检查是否有此类软件,并临时排除Docker相关路径(如C:\ProgramData\Docker)的扫描规则。
内容的提问来源于stack exchange,提问作者tmaurst

