Dockerfile中用SSH Key克隆GitLab私有仓库遇公钥权限拒绝错误
解决Docker BuildKit构建时GitLab私有仓库克隆权限拒绝问题
以下是针对你遇到的git@gitlab.com: Permission denied (publickey)问题的排查和解决步骤:
确认SSH代理状态与密钥加载
本地终端能正常访问GitLab不代表BuildKit能自动获取到代理中的密钥。先检查密钥是否已添加到SSH代理:ssh-add -l如果没有输出对应密钥,手动添加私钥:
ssh-add ~/.ssh/id_rsa # 替换为你的私钥文件名若系统的SSH代理套接字路径特殊,构建时显式指定代理路径:
DOCKER_BUILDKIT=1 docker build --ssh default=$SSH_AUTH_SOCK --tag test:local .检查Dockerfile的用户上下文
如果你在Dockerfile中切换了非root用户(比如RUN useradd -m app && USER app),挂载的SSH资源默认属于root用户,导致切换后的用户无法访问。需要在--mount参数中指定用户UID:# 先通过本地命令`id -u app`获取目标用户UID(假设用户名是app) RUN --mount=type=ssh,uid=1000 git clone git@gitlab.com:*name_of_repo* *download_location*修复known_hosts配置
ssh-keyscan可能因网络或GitLab密钥更新问题,未能生成正确的known_hosts条目。直接复制本地已验证的GitLab密钥到Dockerfile:RUN mkdir -p -m 0700 ~/.ssh && echo "gitlab.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsj2bNKTBSpIYDEGk9KxsGh3mySTRgMtXL583qmBpzeQ+jqCMRgBqB98u3z++J1sKlXHWfM9dyhSevkMwSbhoR8XIq/U0tCNyokEi/ueaBMCvbcTHhO7FcwzY92WK4Yt0aGROY5qX2UKSeOvuP4D6TPqKF1onrSzH9bx9XUf2lEdWT/ia1NEKjunUqu1xOB/StKDHMoX4/OKyIzuS0q/T1zOATthvasJFoPrAjkohTyaDUz2LN5JoH839hViyEG82yB+MjcFV5MU3N1l1QL3cVUCh93xSaua1N85qivl+siMkPGbO5xR/En4iEY6K2XPASUEMaieWVNTRCtJ4S8H+9" >> ~/.ssh/known_hosts验证Docker对SSH代理的访问权限
检查SSH代理套接字的权限,确保Docker进程能读取:ls -l $SSH_AUTH_SOCK若权限不足,临时调整套接字权限(注意安全风险,仅用于排查):
chmod 666 $SSH_AUTH_SOCK
内容的提问来源于stack exchange,提问作者JackLidge
相关产品推荐
相关产品推荐

