2017-03-26 31 views
1

我正在構建一個Django Web應用程序,以編譯和運行用戶提交的不同語言的不可信代碼。 背後編譯步驟如下:使用Docker在Django App中編譯和運行不受信任的代碼

  1. 從使用bash腳本一個文件名
  2. 運行提供了運行動作
  3. 店在數據庫編輯器以代碼。

由於有直接運行在終端代碼的安全性的問題,我已經想使用多克爾作爲解決方案。我創建了一個碼頭工人文件,如下所示:

FROM chug/ubuntu14.04x64 

# Update the repository sources list 

RUN echo "deb http://archive.ubuntu.com/ubuntu trusty main universe" > /etc/apt/sources.list 
RUN apt-get update 
#RUN apt-get upgrade 
#Install all the languages/compilers we are supporting. 
RUN apt-get install -y gcc 
RUN apt-get install -y g++ 
RUN apt-get install -y python 

我希望能建立集裝箱由用戶運行的每個代碼,並在使用後銷燬。但是,如何爲每個用戶的每次運行創建容器並在使用後放置容器?

回答

0

根據this發表在docker論壇上和this one在stackoverflow上運行Docker中的不可信代碼可以增加一些安全性,但是由於它使用了操作系統的內核,所以不安全。正如this在stackexchange中的帖子所示,如果您希望安全性考慮虛擬機。

現在回答你如何的問題:

您可以生成包含「COPY源/源」複製文件線dockerfile到你的容器(而不是安裝一個體積是不太安全在論壇發帖解釋)複製一個bash腳本編譯並運行代碼,然後在「CMD [」sh,script「]」中執行該腳本。

既然你不知道什麼類型的代碼正在運行,你還應該使用像--memory-reservation這樣的標誌來限制容器獲得的資源,以確保它不會佔用你係統的所有資源。您可以找到如何在資源here上設置資源和內核約束條件以及其他可能有用的標誌(如--rm在最後刪除數據)。