2014-09-06 32 views
5

我想在Docker中構建一個圖像,需要一些祕密文件來執行像從私人git倉庫中拉出的東西。我見過很多人有這樣的代碼:訪問在Dockerfile中構建所需的祕密/私有文件?

ADD id_rsa /root/.ssh/id_rsa 
RUN chmod 700 /root/.ssh/id_rsa 
RUN touch /root/.ssh/known_hosts 
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts 
RUN git clone [email protected]:some/repo.git /usr/local/some_folder 

雖然這樣的作品,這意味着我必須存儲我的私人id_rsa與我的形象,這在我看來是一個壞主意。我寧願做的事情就是將我的祕密文件保存在s3等雲存儲中,只需將憑據作爲環境變量傳遞,以便能夠將其他所有內容都取消。

我知道我可以在docker run-e開關通過環境變量,但如果我在構建時需要一些文件(如id_rsa來執行git克隆),我該怎麼辦?理想情況下,我可以將環境變量傳遞給docker build,但這不可能(我不明白爲什麼)。

那麼,想法?在這裏做什麼規範/正確的事情?我不能成爲這個問題的第一人。

+0

[Docker和安全密碼]的可能重複(http://stackoverflow.com/questions/22651647/docker-and-securing-passwords) – 2014-09-06 09:02:13

+0

爲什麼需要在構建容器時克隆回購?你不能只有這些文件已經存在本地?這樣你就可以擺脫祕密文件的問題,並且不需要在圖像上安裝git – 2014-09-06 16:41:40

+0

@AbelMuiñorepo將獨立於Docker進行更新,因此在任何新的圖像構建中,我們總是需要最新版本的回購。在本地克隆一個回購站並讓這些文件分別成爲圖像的一部分將導致更多的工作不得不不斷更新回購站,並首先破壞了使用Git的目的。 – Eli 2014-09-06 21:16:43

回答

2

我會用最簡單的一部分,我認爲這是一個普遍的誤解開始:

理想我想能夠通過環境變量來泊塢窗的身材,但是那是不可能的(我不能理解爲什麼)。

碼頭構建意味着可重複性。給定相同的上下文(與Dockerfile相同的目錄下的文件),生成的圖像是相同的。他們也是很簡單的。這兩件事一起解釋了缺少環境選項或其他條件。現在

,因爲構建必須重複性,每個命令的執行是緩存。如果您運行構建兩次,git pull將只運行第一次。

通過您的評論,這是不是你想要什麼:

等任何新形象的構建,我們總是希望回購

最新版本的要觸發你需要一個新的版本以更改上下文或Dockerfile

規範方式(我可能濫用的話,但這是automated builds如何工作)是包括在GIT中Dockerfile

這允許一個簡單的工作流程git pull ; docker build ...,並避免存儲您的git憑證的問題。

相關問題