LXC: 컨테이너 내부에서 애플리케이션 실행 자동화

LXC: 컨테이너 내부에서 애플리케이션 실행 자동화

저는 C, C++, Java 및 Python으로 제출된 프로그램의 출력을 자동으로 컴파일, 실행 및 테스트하는 프로젝트를 진행하고 있습니다. 모든 종류의 코드가 제출될 수 있으므로 이는 일종의 보안 환경 내에서 발생해야 합니다. Chroot Jail을 사용하여 컨테이너를 직접 만들려고 시도했지만 결국 실용적이지 않아 컨테이너로 전환했습니다.

이제 int i인수로 받아 i+1. plusone.out테스트 입력 목록( )과 함께 C 프로그램(예: input.txt)을 LxC 컨테이너에 복사하고, 컨테이너 내부에서 프로그램을 실행하고, 출력을 파일( output.txt)에 쓰고, 해당 파일을 내보내는 스크립트를 작성하고 싶습니다. 컨테이너 외부에서 실행되는 기본 애플리케이션이 결과를 확인할 수 있도록 호스트 시스템으로 돌아갑니다. 리소스에도 몇 가지 제한이 필요하지만 LxC의 내장 cgroups구현을 사용하면 그렇게 할 수 있습니다.

위에 설명된 대부분의 작업을 수행하는 방법을 알고 있지만 호스트에서 컨테이너로 또는 그 반대로 파일을 복사하는 방법을 평생 알 수 없습니다. 내가 보는 모든 튜토리얼은 컨테이너를 실행 ls하거나 echo컨테이너 내부에서 동작을 보여 주지만 호스트 시스템에서 스크립트나 프로그램을 가져오지는 않습니다. 누구든지 나를 도와주거나 이 작업을 수행하는 방법을 알려주는 문서를 참조할 수 있습니까?

답변1

웹 서버에서 실행되고 있습니까?그렇다면 호스트와 컨테이너가 실제로 잠겨 있는지 확인하십시오. 공개 웹사이트에 있는 경우 두 배로 확인하세요. (알고 있는 것처럼 들리지만 언급해야 한다고 생각했습니다.)

바이너리를 컨테이너 파일 시스템에 직접 복사합니다.

호스트 '실행자' 프로그램에 루트 권한이 있다고 가정하고 다음을 시도하십시오.

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

Rootfs는 컨테이너의 원시 파일 시스템입니다. 그런 다음 다음과 같은 작업을 수행하여 스크립트를 실행합니다.

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

루트로 실행되고 있지 않으면 권한이 없는 컨테이너를 사용해 보세요.(실제로 보안 측면에서 더 나을 수도 있습니다). 그런 다음 루트가 필요 없이 파일을 컨테이너에 직접 복사할 수 있습니다. Stephane Graber(Ubuntu의 lxc 개발자 중 한 명)는 자신의 블로그에 훌륭한 소개를 했습니다:권한이 없는 LXC 컨테이너 소개

관련 정보