2017-09-15 41 views
4

因此,我想在我的映像中包含一個rsa鍵,以便在構建時可以將git repo克隆到我的映像中。但我真的不想在docker build repo中保持這個關鍵。有沒有人有如何處理這個好的建議?從docker文檔和各種其他線程看來,沒有辦法從構建上下文之外的文件COPY。除了下面的解決方案,我沒有興趣使用:Docker:將rsa鍵添加到構建上下文以外的圖像

How to include files outside of Docker's build context?

是否有更好的解決方案呢?或者,我將不得不將密鑰保存在構建庫中,或者從我想使用的rsa密鑰的位置構建?

我想做一個可能的方法是將gitignore的構建倉庫中的關鍵字放在任何時候我克隆它,並在自述文件中記下它,以便其他開發人員也知道這麼做。

---我的解決方案---

我不認爲這是一個「正確」的答案了這一點,但這裏是我去解決。

我創建一個linux用戶(某處)併爲它生成密鑰。然後在gitlab上創建一個只有repo克隆權限的用戶。我將linux用戶的公鑰添加到gitlab用戶。然後爲構建創建.ssh文件夾,並用配置文件複製用戶私鑰。我只是將該用戶密鑰存儲在Docker構建庫中。

構建步驟:

RUN mkdir ~/.ssh 
RUN touch ~/.ssh/known_hosts 
RUN ssh-keyscan -t rsa gitlab_host > ~/.ssh/known_hosts 
COPY ./ssh/config /root/.ssh 
COPY ./ssh/id_rsa_app /root/.ssh 
RUN chmod 600 /root/.ssh/id_rsa_app 

的ssh配置文件:

Host gitlab-app 
    HostName gitlab_host 
    IdentityFile /root/.ssh/id_rsa_app 
    IdentitiesOnly yes 

現在git的克隆工程構建的內部。

回答

3

怎麼樣使用build argument?做這樣的事情在你的Dockerfile:

ARG rsakey 
RUN test -n "${rsakey}" && { \ 
     mkdir -p -m 700 /root/.ssh; \ 
     echo "${rsakey}" > /root/.ssh/id_rsa; \ 
     chmod 600 /root/.ssh/id_rsa; \ 
    } || : 

然後,當你建立的形象,使用--build-arg選項:

docker build -t sshtest --build-arg rsakey="$(cat /path/to/id_rsa)" . 

這將注入鑰匙插入在生成時的圖像沒有它無需對住在你的構建環境中。

+0

謝謝,這將是一個可行的解決方案。但我們決定創建一個名爲'app'的linux用戶,爲其創建一個密鑰,然後在我們的gitlab上創建一個'app'用戶,只擁有克隆回購的權限。然後,我們只需在配置文件中將此密鑰放入我們的Docker倉庫中。往上看。 – ThriceGood