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
相关产品推荐
相关产品推荐

