Я работаю над проектом, который автоматически компилирует, выполняет и проверяет вывод представленных программ на C, C++, Java и Python. Очевидно, что это должно происходить внутри какой-то защищенной среды, поскольку любой код может быть представлен. После попытки создать контейнер самостоятельно с помощью chroot-тюрьмы, что оказалось непрактичным, я обратился к контейнерам.
Теперь, скажем, у меня есть программа на C, которая принимает int i
качестве аргумента и возвращает i+1
. Я хочу написать скрипт, который копирует программу на C (скажем, plusone.out
) вместе со списком тестовых входных данных (input.txt
) в контейнер LxC, выполняет программу внутри контейнера, записывает выходные данные в файл (output.txt
) и экспортирует этот файл обратно в хост-систему, чтобы основное приложение (работающее вне контейнера) могло проверить результаты. Там также должны быть некоторые ограничения на ресурсы, но я могу сделать это с помощью встроенной реализации LxC cgroups
.
Я знаю, как сделать большинство вещей, описанных выше, но я не могу понять, как копировать файлы с хоста в контейнер или наоборот. Каждый учебник, который я вижу, демонстрирует поведение, запуская ls
или echo
внутри контейнера, но никогда не импортируя скрипт или программу из хост-системы. Кто-нибудь может мне помочь или, возможно, направить меня к документации, которая может сказать мне, как это сделать?