我正在编写一个将在 LXC 容器中运行的二进制文件。我控制二进制文件的源代码,但不控制它将在其中运行的容器的内容。特别是,我不想通过将二进制文件写入容器来污染容器。
有什么方法可以运行存储在主机上的二进制文件,但在容器的执行上下文(命名空间、chroot、删除的功能等)内?
你可以让你编程到setns(2)(一些,但不是所有的命名空间),chroot 然后删除功能。
你也可以通过dived获得类似的东西(实际上不是chroot,但可以访问容器的chroot)。
您可以在容器内运行 [静态链接](使用适当的选项,例如,--client-chroot --root-to-current
),在容器和主机上都可见的某些文件系统部分上侦听 UNIX 套接字;并运行dive
以要求dived
在容器的命名空间中启动您的非静态链接程序。根文件系统将与您的主机保持相同(因此您的程序可以找到库),并且容器的根文件系统将设置为当前目录。
我不认为这是可能的。您可以做的是在容器和主机之间挂载一个共享文件夹(使用绑定挂载)。然后,您可以使用 启动二进制文件(现在是容器 FS 的一部分)chroot
,例如:
sudo chroot <container_rootfs> /bin/bash -c 'cd <your shared folder>; ./<your_binary>'
您可以在主机上安装并应用升级到您的程序,然后使用此答案中描述的 lxc 容器
性能或磁盘空间成本几乎为零
我认为您可以将 samba 服务从主机导出到容器。您只需将您的东西放到 samba 的共享文件夹中,不要污染容器。