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

GitLab CI/CD中Docker Compose指定远程主机拉取镜像失败排查

问题解决指南

核心错误:SSH主机密钥验证失败

你遇到的Host key verification failed是当前首要问题——GitLab Runner的Docker执行器容器首次连接预发布服务器时,未将对方的SSH主机密钥加入信任列表,导致连接被拒绝。

解决方法:在CI流程中添加主机密钥扫描步骤,放在ssh-add之后:

- mkdir -p ~/.ssh
- ssh-keyscan -H $DEPLOY_SERVER >> ~/.ssh/known_hosts

这会自动获取并信任预发布服务器的主机密钥,跳过交互式验证环节。

预发布服务器的Docker登录需求

是的,必须在预发布服务器上完成GitLab容器仓库的登录操作,否则docker-compose pull会因权限不足失败(如果你的镜像仓库是私有)。你可以通过SSH远程执行登录命令:

- ssh $DEPLOY_USER@$DEPLOY_SERVER "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY"

注意使用$CI_REGISTRY而非$CI_REGISTRY_IMAGE,因为登录的是整个注册表,而非单个镜像仓库。

调整后的完整CI步骤

- eval $(ssh-agent -s)
- echo "$DEPLOY_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- ssh-keyscan -H $DEPLOY_SERVER >> ~/.ssh/known_hosts
- ssh $DEPLOY_USER@$DEPLOY_SERVER "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY"
- docker-compose -H "ssh://$DEPLOY_USER@$DEPLOY_SERVER" down --remove-orphans || true
- docker-compose -H "ssh://$DEPLOY_USER@$DEPLOY_SERVER" pull
- docker-compose -H "ssh://$DEPLOY_USER@$DEPLOY_SERVER" up -d

额外检查项

  • 确认预发布服务器的Docker版本≥18.09,执行ssh $DEPLOY_USER@$DEPLOY_SERVER "docker --version"验证。
  • 确认$DEPLOY_SSH_PRIVATE_KEY对应的公钥已添加到预发布服务器的~/.ssh/authorized_keys中,且文件权限为600,~/.ssh目录权限为700。

内容的提问来源于stack exchange,提问作者Maksat Baigazy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:31:09