在Docker构build期间的SSH代理转发

当通过dockerfilebuild立一个docker镜像时,我必须克隆一个github仓库。 我已经将我的公共ssh密钥添加到我的git hub帐户,并且能够从我的docker主机克隆repo。 虽然我看到我可以使用docker主机的ssh密钥通过映射$SSH_AUTH_SOCK envvariables在docker运行时像docker run --rm -it --name container_name \ -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \ -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK my_image

在Docker构build过程中我怎样才能做到这一点?

不幸的是,你不能将你的ssh套接字转发到构build容器,因为构build时间卷挂载目前在Docker中不受支持。

这已经是一段时间讨论的话题了,请参考GitHub上的以下问题以供参考:

正如你所看到的,这个特性已经被多次请求用于不同的用例。 到目前为止,维护人员一直在犹豫如何解决这个问题,因为他们认为在构build过程中的卷装会破坏可移植性:

构build的结果应该独立于底层主机

如本讨论中所概述的。

求解。 创buildbash脚本(〜/ bin / docker-compose或类似):

 #!/bin/bash trap 'kill $(jobs -p)' EXIT socat TCP-LISTEN:56789,reuseaddr,fork UNIX-CLIENT:${SSH_AUTH_SOCK} & /usr/bin/docker-compose $@ 

在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