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


0

제출 된 프로그램의 출력을 C, C ++, Java 및 Python으로 자동 컴파일, 실행 및 테스트하는 프로젝트를 진행하고 있습니다. 분명히 어떤 종류의 코드를 제출할 수 있기 때문에 일종의 보안 환경에서 발생해야합니다. 실용적이지 않은 chroot jail으로 컨테이너를 직접 만들려고 시도한 후 컨테이너로 전환했습니다.

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

위에서 설명한 대부분의 작업을 수행하는 방법을 알고 있지만 수명 동안 호스트에서 컨테이너 또는 다른 방법으로 파일을 복사하는 방법을 찾을 수 없습니다. 내가 본 모든 자습서 는 컨테이너 를 실행 ls하거나 echo컨테이너 내부에서 동작을 보여 주지만 호스트 시스템에서 스크립트 나 프로그램을 가져 오지 않습니다. 누구든지 나를 도울 수 있습니까? 아니면 이것을 달성하는 방법을 알려주는 문서를 참조 할 수 있습니까?


1
슬픔을 많이 피하고 Docker를 살펴보십시오.
Michael Hampton

답변:


0

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

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

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

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

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

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

루트로 실행되지 않으면 권한이없는 컨테이너를 사용해보십시오 (실제로는 보안 관점에서 더 나을 수 있습니다) . 그런 다음 루트없이 파일을 컨테이너에 직접 복사 할 수 있습니다. Stephane Graber (우분투의 lxc 개발자 중 하나)는 자신의 블로그에 대한 소개가 있습니다 : 특권이없는 LXC 컨테이너 소개


재미있게도 당신은 내가 프로젝트를 마친 바로 그 날에이 답변을 제출했습니다. 제안 된 내 의견에 대한 논평자와 같은 Docker와 함께 갔지만 LXC를 선택하면 귀하의 답변이 매우 도움이 된 것처럼 보이므로 어쨌든 동의합니다. 감사!
Ghijs Kilani 2016 년

환상적인! 도움이되어 다행입니다.
user71931
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.