2017-04-14 79 views
9

在通過dockerfile構建Docker鏡像時,我必須克隆github庫。我已將我的公用ssh密鑰添加到我的git hub帳戶,並且可以從我的docker主機克隆該repo。雖然我看到我可以使用碼頭主機的ssh密鑰映射$SSH_AUTH_SOCK env變量在碼頭運行時像docker run --rm -it --name container_name \ -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \ -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK my_imageDocker構建期間的SSH代理轉發

如何在碼頭構建過程中做同樣的事情?

+2

你需要那麼什麼是使用私人密鑰做'git克隆'?也許這不是直接回答你的問題,但我認爲http://farazdagi.com/blog/2016/ssh-private-keys-on-docker-build/可能會有所幫助。 – shizhz

回答

0

不幸的是,由於Docker目前不支持構建時間卷掛載,所以不能將ssh套接字轉發到構建容器。

這一直是人們討論的話題相當長的一段時間了,在Github上查看以下問題以供參考:

正如你可以看到這個功能有被多次請求用於不同的用例。到目前爲止,維護者一直在猶豫,因爲他們覺得卷安裝解決這一問題過程中積累會破壞可移植性:

構建的結果應該是獨立於底層主機

由於在this討論中概述。

0

解決。 創建bash腳本(〜/斌/泊塢窗,撰寫或喜歡):

#!/bin/bash 

trap 'kill $(jobs -p)' EXIT 
socat TCP-LISTEN:56789,reuseaddr,fork UNIX-CLIENT:${SSH_AUTH_SOCK} & 

/usr/bin/docker-compose [email protected] 

而且在Dockerfile使用socat:

... 
ENV SSH_AUTH_SOCK /tmp/auth.sock 
... 
    && apk add --no-cache socat openssh \ 
    && /bin/sh -c "socat -v UNIX-LISTEN:${SSH_AUTH_SOCK},unlink-early,mode=777,fork TCP:172.22.1.11:56789 &> /dev/null &" \ 
    && bundle install \ 
... 
or any other ssh commands will works 

然後運行docker-compose build