【问题标题】:Docker: Share the same .so library different containers without compiling into eachDocker:共享相同的 .so 库不同的容器,而无需编译到每个容器中
【发布时间】:2015-02-08 07:05:52
【问题描述】:

有没有一种方法可以让多个容器在主机内共享一个共享库,而无需将库编译到每个容器中。

我希望允许人们使用我们编译成 .so 的测试库在容器中测试他们的代码,但我不想下载和逆向工程。

这可能吗?

编辑

我们不允许人们管理图像/容器(或将它们拉到他们的本地环境中)。我们提供了一个接口,可以在引擎盖下启动容器。我的问题是,是否有可能阻止人们编写在创建运行代码的容器的图像中下载.so 的代码。

我的理解是,尽管 Docker 使用了层,但容器内的代码仍然可以访问镜像附带的所有内容。我说的对吗?

【问题讨论】:

    标签: c++ docker


    【解决方案1】:

    假设您的意思是“不将库构建到图像中”而不是:

    无需将库编译到每个容器中

    那么,不,那是不可能的。分发 docker 镜像就像一个普通的二进制文件,没有什么可以阻止任何人对其进行逆向工程。

    如果您的映像用户已经可以访问他们主机上某处的.so,那么您可以简单地让他们使用卷挂载它。

    为了澄清 re:layers,这只是意味着如果您的 .sodocker build 过程中的某个时刻恰好存在于磁盘上,那么如果您不想访问它,则不能只使用 rm 它,因为它所在的层将始终可用。

    【讨论】:

    • 是的,用户可以简单地执行docker cp CONTAINER:/lib/test.so ~/Documents/test.so之类的操作
    • 为了澄清,用户只能在容器内运行命令(例如在交互模式下)。我可以阻止他们做这样的事情:insidethecontainer$ scp /lib/test.so user@somewhereelse:~/Downloads 要么将库安装在已安装的卷上,要么安装在基础映像上?
    • 我明白了。在这种情况下,这将成为一个 linux 安全问题,与 docker 本身并不特别相关。我不是 linux 安全方面的专家,但我想如果你将文件只执行权限授予其他用户,你会没事的:RUN chmod 711 /lib/test.so。当然,请确保您还设置了USER something_not_root
    • 我明白了。我会试试这个。我认为可能有一种特定于 docker 的方法。
    • "如果您的映像用户已经可以访问他们主机上某处的 .so,那么您可以简单地让他们使用卷挂载它。"您能否进一步解释一下,我相信我需要为我当前的设置执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多