【问题标题】:Best practice for running a non trusted .net core application inside a docker container在 docker 容器中运行不受信任的 .net 核心应用程序的最佳实践
【发布时间】:2016-10-10 18:30:38
【问题描述】:

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

  • 为简化起见,我们假设应用程序是由dotnet new 生成的简单Hello World 控制台应用程序。这只是 Program.csproject.json 两个文件。

目前我尝试了以下方法:

  • 将该应用程序复制到我主机的某个文件夹中
  • 使用microsoft/dotnet 映像创建一个新容器,将该文件夹挂载为卷,运行特定命令来构建和运行应用程序:

    $ docker run --rm -it --name dotnet \
                 -v /some/temp/folder/app:/app \
                 microsoft/dotnet:latest \
                 /bin/sh -c 'cd /app && dotnet restore && dotnet run'
    

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

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

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

ENTRYPOINT ["dotnet", "run"]

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

对于简单的命令行应用程序来说,dockerfile 方法是否矫枉过正?运行那些不受信任的应用程序的最佳做法是什么?(这可能是我完全忽略的)

编辑

由于我将在容器运行后丢弃容器,并且某些应用程序将生成 docker 命令,因此我可能会保留仅安装卷的第一个选项。

我还找到了this blog post,他们在其中构建了一个类似的 sanbox 环境并最终遵循相同的mounted volume approach

【问题讨论】:

    标签: docker asp.net-core .net-core


    【解决方案1】:

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

    当您将卷 (-v) 链接到映像时,该过程可以更改您挂载的文件夹中的文件。但只有那里。该进程不能跟随任何符号链接或退出已安装的文件夹,因为出于明显的安全原因,它被禁止。

    当你不链接任何东西并将应用​​程序代码复制到图像中时,它肯定是孤立的。

    tcp/udp 端口​​说明以及内存/cpu 消耗取决于您,您甚至可以将进程与互联网隔离e.g. like that


    因此,我不认为使用 dockerfile 是矫枉过正,我会这样总结:

    当您想运行一次时,尝试并忘记它 - 如果您可以输入讨厌的命令,请使用命令行。如果您打算更多地使用它 - 创建一个 Dockerfile。考虑到个人喜好问题,我认为在这里声明“最佳实践”的空间不大。

    【讨论】:

    • 也许我应该更明确一点,我的意思是这两个选项中的哪一个是该场景的最佳实践或方法。我只是想旋转一个容器,这样我就可以运行应用程序并在以后丢弃它,所以我认为创建图像可能有点浪费,只安装卷就足够了。但是我在 docker 方面没有丰富的经验,我可能会忽略一些细节,这些细节会决定一个有利于另一个
    • @DanielJ.G.我想说这成为个人偏好的问题,因为它在技术上并没有太大的区别。从我的角度来看 - 如果您使用 dockerfile,它会更加孤立,您不必每次都编写那个地狱般的命令。您可以随时重复使用/删除图像。
    • @DanielJ.G.或者我会说:如果你想运行一次,试一试然后忘记它 - 如果你可以输入命令,请使用命令行。如果您打算更多地使用它 - 创建一个 dockerfile。我没有看到在这里声明“最佳实践”的空间......
    • 这或多或少是我的想法。我还发现了this blog,他们在其中创建了一个用于编译运行代码的沙箱,他们基本上只是mount the volume
    • 顺便说一句,您能否用您上次评论中的内容更新您的答案,以便我接受?
    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多