LXC:在容器內自動執行應用程式

LXC:在容器內自動執行應用程式

我正在開發一個項目,可以自動編譯、執行和測試用 C、C++、Java 和 Python 提交的程式的輸出。顯然,這需要在某種安全環境中發生,因為可以提交任何類型的程式碼。在嘗試使用 chroot 監獄自己創建容器後,結果不切實際,我轉向了容器。

現在,假設我有一個 C 程序,它接受一個int i參數,並傳回該值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 容器簡介

相關內容