You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 Docker容器遇UnauthorizedAccessException权限错误如何解决?

解决.NET 6 Docker容器中单元测试的UnauthorizedAccessException问题

问题原因

使用--user=999运行容器时,该非root用户没有权限在根目录(/)下创建或访问.local/share/NuGet/Migrations目录。默认情况下,NuGet会尝试在当前用户的主目录存储迁移相关文件,而用户999的主目录被设置为/,导致权限不足触发异常。

解决方案

1. 调整环境变量指定可访问目录

通过设置HOME环境变量,将用户999的主目录指向容器内可写的临时目录(如/tmp),让NuGet在该目录下创建所需文件:

docker-compose -f docker-compose.yml run --user=999 -e DOTNET_CLI_HOME=/tmp/dotnet_home -e DOTNET_CLI_TELEMETRY_OPTOUT=1 -e HOME=/tmp unit-tests

也可以直接指定NuGet的包存储目录:

docker-compose -f docker-compose.yml run --user=999 -e DOTNET_CLI_HOME=/tmp/dotnet_home -e DOTNET_CLI_TELEMETRY_OPTOUT=1 -e NUGET_PACKAGES=/tmp/nuget_packages unit-tests

2. 在Dockerfile中预创建目录并授权

如果是自定义unit-tests服务的镜像,可在构建阶段提前创建目标目录并修改权限,确保用户999能访问:

FROM mcr.microsoft.com/dotnet/aspnet:6.0-bullseye-slim

# 创建NuGet迁移目录并设置归属权限
RUN mkdir -p /.local/share/NuGet/Migrations && chown -R 999:999 /.local/share/NuGet

# 后续操作:复制测试项目、设置工作目录等

3. 临时使用root用户运行(测试场景可选)

若测试环境对安全性要求较低,可移除--user=999参数,以root用户执行测试:

docker-compose -f docker-compose.yml run -e DOTNET_CLI_HOME=/tmp/dotnet_home -e DOTNET_CLI_TELEMETRY_OPTOUT=1 unit-tests

内容的提问来源于stack exchange,提问作者Abdullah Khawer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:41:25