我尝试在运行时(而不是在构建期间)使用 ssh 从容器克隆存储库。系统不断提示我输入 sshkey 的密钥短语(密钥没有密码短语)。有没有办法将容器中的 ssh 代理与主机的 ssh 代理绑定在一起,或者有某种方法可以避免使用容器的 ssh 代理?
编辑 - 我还不能发表评论,但作为新用户,我有兴趣改进我的问题,所以如果你要投反对票,至少请礼貌地留下评论告诉我原因。
答案1
如果您在本地运行 ssh 代理(您应该这样做),则可以在容器内公开 ssh 代理套接字。例如,如果我们假设存在一个名为 的图像,cloner
其中包含git
和ssh
,我们可以运行:
docker run -it --rm \
-v $SSH_AUTH_SOCK:/tmp/ssh.sock \
-e SSH_AUTH_SOCK=/tmp/ssh.sock cloner \
git clone [email protected]:octocat/Hello-World
在上文中,我们使用绑定挂载公开容器内的代理套接字,使其可用作/tmp/ssh.sock
。然后,我们将SSH_AUTH_SOCK
容器内的环境变量设置为指向/tmp/ssh.sock
。
如果您没有运行代理,事情会变得有点棘手,因为 ssh 对权限的要求很严格,而且在许多情况下,容器内运行的用户 ID 与拥有密钥文件的用户 ID 不匹配。