LXC:自动运行容器内的应用程序

LXC:自动运行容器内的应用程序

我正在开发一个项目,该项目可以自动编译、执行和测试所提交的 C、C++、Java 和 Python 程序的输出。显然,这需要在某种安全环境中进行,因为可以提交任何类型的代码。在尝试使用 chroot jail 自行创建容器(最终发现不切实际)后,我转向了容器。

现在,假设我有一个 C 程序,它接受一个int ias 参数并返回该参数i+1。我想编写一个脚本,将 C 程序(假设plusone.out)连同测试输入列表(input.txt)一起复制到 LxC 容器,在容器内执行程序,将输出写入文件(output.txt),然后将该文件导出回主机系统,以便主应用程序(在容器外运行)可以检查结果。还需要对资源进行一些限制,但我可以使用 LxC 的内置实现来做到这一点cgroups

我知道如何完成上面列出的大部分内容,但我无论如何也找不到如何将文件从主机复制到容器或反过来。我看到的每个教程都通过运行lsecho在容器内演示行为,但从未从主机系统导入脚本或程序。有人能帮助我吗,或者能给我推荐一些可以告诉我如何实现这一点的文档吗?

答案1

这是在网络服务器上运行吗?如果是,请确保主机和容器确实已锁定。如果是在面向公众的网站上,请再三确认(听起来您知道该怎么做,但我想提一下)

将二进制文件直接复制到容器文件系统

假设您的主机“执行器”程序具有 root 权限,请尝试以下操作:

cp test_runner /var/lib/lxc/<container_name>/rootfs/tmp/

Rootfs 是容器的原始文件系统。然后,您可以通过执行以下操作来执行脚本:

lxc-attach -n container -- /tmp/testprogram

如果不是以 root 身份运行,请尝试使用非特权容器(从安全角度来看这实际上可能更好)。然后,您可以将文件直接复制到容器中,而无需 root 权限。Stephane Graber(ubuntu 的 lxc 开发人员之一)在他的博客上有一个很棒的介绍:非特权 LXC 容器简介

相关内容