在VirtualBox(Ubuntu16.04)配置GitLab CI/CD时遇gitlab-ci-token连接失败
解决GitLab CI/CD无法访问gitlab-ci-token的连接失败问题
看起来你在VirtualBox里的Ubuntu 16.04环境部署GitLab CI/CD时踩了个坑——用GitLab Runner 10.5.0搭配Docker executor(node:carbon-alpine镜像)跑任务时,碰到了无法访问gitlab-ci-token、连接失败的问题。我之前也遇到过类似情况,给你分享几个实用的排查和解决思路:
1. 先搞定虚拟机的网络连通性
因为你的Runner是在VirtualBox虚拟机里,首先得确保它能正常连到GitLab服务器:
- 如果GitLab也是部署在本地虚拟机里,把两台虚拟机的网络模式都改成桥接模式(Bridge Adapter),或者用Host-Only网络并配置好静态IP,保证它们在同一网段。
- 在Runner所在的Ubuntu机器上手动ping GitLab的域名或IP,要是ping不通,先把网络连通性这个基础问题解决掉。
2. 核对Runner的注册配置是否正确
Runner注册时的URL和token错了也会导致认证失败,这是个很容易犯的小错误:
- 登录你的GitLab项目,进入「Settings > CI/CD > Runners」,找到项目专属Runner的注册URL和token。
- 打开Runner机器上的配置文件
/etc/gitlab-runner/config.toml,对比里面的url和token字段,确保和GitLab上的完全一致。要是不对,就重新注册Runner:# 先注销旧的Runner gitlab-runner unregister --name sr-runner # 重新注册,替换成你自己的URL和token gitlab-runner register \ --url "你的GitLab服务器URL" \ --registration-token "你的项目注册token" \ --executor docker \ --docker-image node:carbon-alpine \ --name sr-runner
3. 给Docker executor配置宿主机网络模式
默认情况下,Docker容器用的是自己的桥接网络,可能没法访问宿主机或者GitLab服务器。试试让容器直接用宿主机的网络:
- 编辑
/etc/gitlab-runner/config.toml,在[runners.docker]区块里添加network_mode = "host":[[runners]] name = "sr-runner" url = "你的GitLab服务器URL" token = "1d32ebc7..." executor = "docker" [runners.docker] tls_verify = false image = "node:carbon-alpine" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] shm_size = 0 network_mode = "host" # 新增这一行 - 修改完记得重启GitLab Runner服务:
sudo gitlab-runner restart
4. 检查GitLab服务器的CI/CD权限设置
有时候是GitLab服务器的配置限制了Runner的访问:
- 进入GitLab的「Admin Area > Settings > Network > Outbound requests」,确认允许本地请求(如果GitLab和Runner在同一局域网的话)。
- 检查项目的「Settings > Repository > Protected branches」,看看你的分支是不是被设为保护分支导致Runner拉取不到代码——不过一般gitlab-ci-token是有权限的,但也可以排除这个可能性。
5. 升级GitLab Runner到稳定版本
你用的10.5.0版本真的有点老了,很多旧版本的网络和认证问题在新补丁里都修复了。建议升级到最新的稳定版:
# 先停止Runner服务 sudo gitlab-runner stop # 添加GitLab官方源并安装最新版 curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash sudo apt-get install gitlab-runner # 启动服务 sudo gitlab-runner start
6. 手动测试容器内的网络连通性
如果上面的方法都不管用,直接启动一个node:carbon-alpine容器,测试里面能不能访问GitLab:
docker run -it node:carbon-alpine sh # 在容器里ping GitLab的域名/IP ping your-gitlab-url.com # 用curl试试能不能访问GitLab API curl https://your-gitlab-url.com/api/v4/projects
要是容器里也访问不了,那就是Docker的网络配置有问题,比如DNS设置不对。可以在/etc/docker/daemon.json里添加DNS服务器:
{ "dns": ["8.8.8.8", "1.1.1.1"] }
然后重启Docker服务:
sudo systemctl restart docker
内容的提问来源于stack exchange,提问作者user3058277
相关产品推荐
相关产品推荐

