【问题标题】:Run a program inside an LXC container that is stored on the host在存储在主机上的 LXC 容器内运行程序
【发布时间】:2013-03-24 14:34:10
【问题描述】:

我正在编写一个将在 LXC 容器中运行的二进制文件。我控制二进制文件的源代码,但不控制它将在其中运行的容器的内容。特别是,我不想通过将二进制文件写入容器来污染容器。

有什么方法可以运行存储在主机上的二进制文件,但要在容器的执行上下文(命名空间、chroot、删除的功能等)内运行?

【问题讨论】:

    标签: ubuntu lxc


    【解决方案1】:

    我认为您可以将 samba 服务从主机导出到容器。你只要把你的东西放到 samba 的共享文件夹中,不要污染容器。

    【讨论】:

    • 这将需要安装 Samba、启动它、创建挂载点和挂载共享,所有这些都来自容器内部。这是相当大的污染。
    【解决方案2】:

    我认为这是不可能的。您可以做的是在容器和主机之间挂载一个共享文件夹(使用绑定挂载)。然后,您可以使用 chroot 启动二进制文件(现在是容器 FS 的一部分),例如:

    sudo chroot <container_rootfs> /bin/bash -c 'cd <your shared folder>; ./<your_binary>'

    【讨论】:

      【解决方案3】:

      你可以让你编程到setns(2)(一些,但不是所有的命名空间),chroot,然后删除功能。

      您也可以通过dived 获得类似的东西(实际上不是 chroot,但可以访问容器的 chroot)。

      您可以在容器内运行 [静态链接](使用适当的选项,例如 --client-chroot --root-to-current),在容器和主机上都可见的某些文件系统部分上侦听 UNIX 套接字;并运行dive 要求dived 在容器的命名空间中启动您的非静态链接程序。根文件系统将与您的主机保持相同(因此您的程序可以找到库),并且容器的根文件系统将被设置为当前目录。

      【讨论】:

        【解决方案4】:

        您可以在主机上安装并应用升级到您的程序,然后使用this answer 中描述的 lxc 容器

        在性能或磁盘空间方面几乎没有成本

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-20
          • 1970-01-01
          • 2013-11-13
          • 2017-10-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多