LXC: Automatización de la ejecución de una aplicación dentro de un contenedor

LXC: Automatización de la ejecución de una aplicación dentro de un contenedor

Estoy trabajando en un proyecto que compila, ejecuta y prueba automáticamente el resultado de los programas enviados en C, C++, Java y Python. Obviamente, esto debe suceder dentro de algún tipo de entorno seguro, ya que se puede enviar cualquier tipo de código. Después de intentar crear el contenedor yo mismo con una cárcel chroot, lo que terminó no siendo práctico, recurrí a los contenedores.

Ahora, digamos que tengo un programa en C que toma un int iargumento y lo devuelve i+1. Quiero escribir un script que copie el programa C (digamos plusone.out), junto con una lista de entradas de prueba ( input.txt) en un contenedor LxC, ejecute el programa dentro del contenedor, escriba las salidas en un archivo ( output.txt) y exporte ese archivo. de regreso al sistema host para que la aplicación principal (que se ejecuta fuera del contenedor) pueda verificar los resultados. También es necesario que haya algunas restricciones en los recursos, pero puedo hacerlo con cgroupsla implementación incorporada de LxC.

Sé cómo hacer la mayoría de las cosas descritas anteriormente, pero por mi vida no puedo descubrir cómo copiar archivos del host al contenedor o al revés. Cada tutorial que veo demuestra el comportamiento al ejecutar lso echodentro del contenedor, pero nunca al importar un script o programa desde el sistema host. ¿Alguien puede ayudarme o posiblemente remitirme a documentación que pueda decirme cómo lograr esto?

Respuesta1

¿Esto se ejecuta en un servidor web?Si es así, asegúrese de que el host y los contenedores estén realmente bloqueados. Si está en un sitio web público, asegúrese doblemente (parece que sabe cómo hacerlo, pero pensé en mencionarlo)

Copie el binario directamente al sistema de archivos contenedor

Suponiendo que el programa 'ejecutor' de su host tenga privilegios de root, intente lo siguiente:

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

Rootfs es el sistema de archivos sin formato del contenedor. Luego ejecutarías tu script haciendo algo como:

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

Si no se ejecuta como root, intente utilizar contenedores sin privilegios.(Esto podría ser mejor desde el punto de vista de la seguridad). Luego podría copiar el archivo directamente al contenedor sin necesidad de root. Stéphane Graber (uno de los desarrolladores de lxc para ubuntu) tiene una excelente introducción en su blog:Introducción a los contenedores LXC sin privilegios

información relacionada