![](/img/trans.png)
[英]Docker not seeing mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1803, even though it is installed
[英]Docker container mcr.microsoft.com/dotnet/sdk publish not as a root user
我使用 docker 容器来构建 C# 应用程序。
问题是 output 文件和目录(/bin 和 /obj)的权限是“root”
我希望文件的 output 不是 root 用户(我知道命令 chown 但我想获取文件而不是 root 用户)。
示例: docker run --rm -v /home/user/d:/app -w /app mcr.microsoft.com/dotnet/sdk:3.1 dotnet publish
使用默认的dotnet/sdk
这是不可能的。 但是您可以构建自己的容器映像并将其用于构建应用程序:
FROM mcr.microsoft.com/dotnet/sdk:3.1
ARG UID=1000
ARG GID=1000
RUN groupadd -g $GID user
RUN useradd -g $GID -u $UID -m -s /bin/bash user
USER user
WORKDIR /app
使用您的uid
和gid
构建它,如下所示:
docker build <path to dir with Dockerfile> --build-arg UID=$(id -u) --build-arg GID=$(id -g) -t buildcontainer
这将使用与当前用户具有相同 uid 和 gid 的用户user
构建映像。 然后,您可以使用映像而不是dotnet/sdk
来构建应用程序:
docker run --rm -v /home/user/d:/app buildcontainer dotnet publish
由于 uid 和 gid 在容器与容器外的环境之间匹配,因此 output 文件将具有您期望的所有权。
FROM mcr.microsoft.com/dotnet/sdk:6.0 作为构建
运行 mkdir./app
运行 chmod 777./app
工作目录 /app
复制。 .
运行 dotnet publish -c Release -o dist nameapp.csproj
FROM mcr.microsoft.com/dotnet/runtime:6.0 作为运行时
COPY --from=build app/dist dist
入口点 ["dotnet", "dist/nameapp.dll"]
这是一个示例 Dockerfile,以防它对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.