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

GitLab CI部署报错:文件存在但Docker执行找不到及SSH密钥疑问

问题1:SSH密钥生成与GitLab CI变量更新

首先明确核心逻辑:GitLab Runner运行在git01机器上,它需要通过SSH密钥认证登录staging_server的staging_user,所以密钥的生成和配置要按这个流程来:

  • 登录git01机器,切换到GitLab Runner的运行用户(通常是gitlab-runner,执行sudo su - gitlab-runner)。
  • 生成新的SSH密钥对:ssh-keygen -t ed25519 -C "staging-deploy-key",全程按回车(不要设置密码,CI流程里没法手动输入密码)。
  • 把git01上生成的公钥内容(默认路径~/.ssh/id_ed25519.pub)复制到staging_server的staging_user的~/.ssh/authorized_keys文件中。注意要确保staging_server上的~/.ssh目录权限是700,authorized_keys文件权限是600,否则SSH认证会失败。
  • 最后把git01上的私钥内容(~/.ssh/id_ed25519)完整复制,替换GitLab项目CI/CD设置里的GITSSHKEY变量——一定要包含开头的-----BEGIN OPENSSH PRIVATE KEY-----和结尾的-----END OPENSSH PRIVATE KEY-----,不能漏任何字符。
问题2:Docker镜像拉取TLS握手超时

这个问题基本是网络层面的问题,你可以按以下步骤排查解决:

  • 先在git01机器上手动拉取镜像试试:docker pull [你的镜像全名],如果手动拉取也超时,说明git01到镜像仓库(Docker Hub或私有仓库)的网络连接不稳定。
  • 对应解决办法:
    • 配置Docker镜像加速:编辑/etc/docker/daemon.json,添加国内镜像源(比如"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]),然后重启Docker服务:sudo systemctl restart docker。
    • 检查防火墙/安全组:确认git01的出站443端口没有被限制,镜像仓库地址能正常ping通。
    • 如果是私有镜像仓库,检查Docker的TLS证书配置是否正确,或者临时把私有仓库加入insecure-registries(仅测试环境使用)。
问题3:docker exec提示文件不存在但宿主机实际存在

这里有个容易踩的误区:docker exec是在容器内部执行命令,不是在staging_server宿主机上!你看到宿主机有这个文件,但容器里可能没有对应的路径或文件。解决步骤:

  • 先确认目标容器是否正确:执行docker ps查看运行中的容器,核对你要操作的容器ID/名称。
  • 进入容器内部验证路径:docker exec -it [容器ID/名称] ls /var/www/website.com/src/,看看manage.py是否真的在容器里的这个路径下。
  • 如果容器里没有这个文件,检查容器启动配置:
    • 看docker run命令里有没有-v参数挂载宿主机的/var/www/website.com/src/到容器的对应路径,比如-v /var/www/website.com/src/:/var/www/website.com/src/。
    • 如果用docker-compose,检查volumes字段的配置是否正确,确保宿主机目录和容器目录映射无误。
  • 另外还要确认容器里的Python环境:执行docker exec [容器ID/名称] which python,看python命令是否存在,或者是否需要用python3来执行脚本。

内容的提问来源于stack exchange,提问作者Ciasto piekarz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:54:04