我想在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
,但這不可能(我不明白爲什麼)。
那麼,想法?在這裏做什麼規範/正確的事情?我不能成爲這個問題的第一人。
[Docker和安全密碼]的可能重複(http://stackoverflow.com/questions/22651647/docker-and-securing-passwords) – 2014-09-06 09:02:13
爲什麼需要在構建容器時克隆回購?你不能只有這些文件已經存在本地?這樣你就可以擺脫祕密文件的問題,並且不需要在圖像上安裝git – 2014-09-06 16:41:40
@AbelMuiñorepo將獨立於Docker進行更新,因此在任何新的圖像構建中,我們總是需要最新版本的回購。在本地克隆一個回購站並讓這些文件分別成爲圖像的一部分將導致更多的工作不得不不斷更新回購站,並首先破壞了使用Git的目的。 – Eli 2014-09-06 21:16:43