运行 docker 容器内不受信任的 .net 核心应用程序的最佳实践

Best practice for running a non trusted .net core application inside a docker container

假设我想在 docker 容器中 运行 某些我不完全信任的第三方 .net 核心应用程序。

现在我尝试了以下方法:

我也在考虑使用预定义 docker 文件的想法,其中 microsoft/dotnet 作为基本图像。它基本上会嵌入应用程序代码,将其设置为工作目录和 运行 恢复、构建和 运行 命令。

FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

ENTRYPOINT ["dotnet", "run"]

然后我可以将预定义的 docker 文件复制到临时文件夹中,为该特定应用程序构建一个新图像,最后 运行 使用该图像的新容器。

docker文件方法对于简单的命令行应用程序来说是否过大? 运行宁那些不受信任的应用程序的最佳做法是什么?(我可能完全忽略了这一点)

编辑

因为我会在 运行s 之后丢弃容器并且 docker 命令将由某些应用程序生成,所以我可能会保留第一个选项,即只安装一个卷。

我也找到了this blog post where they built a similar sanbox environment and ended up following the same mounted volume approach

据我所知,docker 中发生的事情将保留在 docker 中。

当您 link 将卷 (-v) 添加到映像时,该过程可以更改您安装的文件夹中的文件。但仅限于此。该进程不能跟随任何 symlinks 或步出安装的文件夹,因为出于明显的安全原因它被禁止。

当你不link任何东西并将应用​​程序代码复制到图像中时,它绝对是隔离的。

tcp/udp 端口展示以及 memory/cpu 消耗由您决定,您甚至可以将进程与互联网隔离 e.g. like that


因此,我认为使用 dockerfile 并不过分,我总结如下:

当您想 运行 一次时,尝试一下然后忘记它 - 如果您可以输入令人讨厌的命令,请使用命令行。如果您打算更多地使用它 - 创建一个 Dockerfile。我认为 space 在这里声明 "best practice" 并不多,因为这是个人喜好问题。