Har*_*h M 6 git ssh-agent docker
我想在构建时将代码从Github拉入我的Docker镜像.我有一个从存储库生成的部署密钥,但在我看来,ssh-agent不能处理我的Docker镜像.
我做了什么(我的Dockerfile):
FROM python:2.7-stretch
ADD ./id_rsa /root/.ssh/id_rsa
RUN eval "$(ssh-agent -s)"
RUN ssh-add -K /root/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
输出:
Step 12/22 : RUN eval "$(ssh-agent -s)"
---> Running in f9ad80981cee
Agent pid 6
Removing intermediate container f9ad80981cee
---> d773f7ce5917
Step 13/22 : RUN ssh-add -K /root/.ssh/id_rsa
---> Running in 95efeed6a7ad
Could not open a connection to your authentication agent.
The command '/bin/sh -c ssh-add -K /root/.ssh/id_rsa' returned a non-zero code: 2
Run Code Online (Sandbox Code Playgroud)
如您所见,ssh-agent已启动,但密钥未添加.
如果我跳过SSH-添加步骤,然后我的git拉失败的,后来因为特权,它是如预期没有发生认证失败.
实际上,您不需要将私钥复制到容器中(最好不要这样做)。
您需要做的就是ssh-agent在主机和 docker 容器上安装并启动,然后您需要做的就是挂载 ssh-aget 的套接字文件:
如果您正在使用docker-compose:
environment:
- "SSH_AUTH_SOCK=/tmp/ssh-agent"
volumes:
- $SSH_AUTH_SOCK:/tmp/ssh-agent
Run Code Online (Sandbox Code Playgroud)
使用泊坞窗:
docker run -v $SSH_AUTH_SOCK:/tmp/ssh-agent 8be57bbc9561 sleep 1000000 # 8be57bbc9561 is an id of the image
docker exec -it -e SSH_AUTH_SOCK=/tmp/ssh-agent 5b6f4a8f8661 /bin/ash # 5b6f4a8f8661 is an id of the container
Run Code Online (Sandbox Code Playgroud)
聚苯乙烯
就您的情况而言,我认为问题可能与export命令有关,该命令通常evaled来自ssh-agent.
它应该为您提供两个变量:SSH_AUTH_SOCK和SSH_AGENT_PID。但这种情况export不会在图像中持续存在。
您已使用过RUN两次:第一次用于启动ssh-agent并导出变量,然后用于添加密钥。每个 Dockerfile 指令都会生成一个中间容器(并且导出不会在它们之间持续存在)。
如果您仍然想以这种方式使用它(我强烈建议避免),您可以尝试将两个命令绑定在一个命令中RUN:
RUN eval "$(ssh-agent -s)" && ssh-add /root/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
我根据上面的回答写了一篇简短的文章。
| 归档时间: |
|
| 查看次数: |
953 次 |
| 最近记录: |