繁体   English   中英

Docker 容器 mcr.microsoft.com/dotnet/sdk 不以 root 用户身份发布

[英]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

使用您的uidgid构建它,如下所示:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM