You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器内GitLab仓库克隆失败(公钥认证拒绝)求助排查

Docker容器内GitLab仓库克隆失败(公钥认证拒绝)求助排查

我来帮你一步步排查这个公钥认证失败的问题,毕竟宿主机能正常克隆但容器里不行,大概率是容器内的密钥使用环节出了小问题,咱们从这几个方向入手:

1. 先看SSH连接的详细日志,定位问题环节

你可以在容器里执行这条命令,查看SSH连接GitLab的完整过程:

ssh -v git@gitlab.com

重点关注输出里有没有类似这样的行:

Offering public key: /home/user1/.ssh/id_ed25519 ED25519 SHA256:xxxxxx

  • 如果看不到这行,说明SSH没有加载你的id_ed25519密钥,可能是权限或路径问题;
  • 如果能看到,但后面跟着“Permission denied”,那就要检查GitLab上的公钥是否匹配,或者密钥本身是否有效。

2. 强制指定密钥测试连接

直接用指定密钥的方式连接GitLab,排除配置文件的干扰:

ssh -i /home/user1/.ssh/id_ed25519 git@gitlab.com

如果这时候能成功连接(出现GitLab的欢迎信息),说明密钥本身没问题,只是容器内的SSH默认没用到它;如果还是失败,那就要确认容器内的id_ed25519.pub内容和GitLab后台添加的公钥是否完全一致。

3. 检查SSH Agent的继承情况

如果你的宿主机是通过ssh-agent缓存密钥的(比如你在宿主机上执行过ssh-add),容器默认不会继承这个Agent连接。你可以试试在容器内手动添加密钥:

ssh-add /home/user1/.ssh/id_ed25519

添加成功后再执行git clone命令试试。

4. 再次确认挂载目录的权限细节

虽然你贴了容器内.ssh目录的权限,看起来是对的(目录700,密钥文件600),但还是要确认:

  • 宿主机上的/home/user1/.ssh目录和文件权限是不是和容器内一致?毕竟是直接挂载的,宿主机的权限会直接影响容器内的访问;
  • 容器内的ubuntu用户UID/GID是不是真的和宿主机的user1完全一致?可以在容器内执行id命令,和宿主机的id输出对比一下,确保UID、GID、用户组都匹配。

5. 排除容器内SSH配置的干扰

检查容器内的SSH客户端配置有没有特殊设置,比如/etc/ssh/ssh_config里有没有指定错误的IdentityFile路径,或者禁用了ED25519密钥。如果有,临时注释掉相关配置再测试。

先按上面的步骤试一遍,应该能定位到具体问题~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:00:28