GitLab runner无法通过http克隆存储库

GitLab runner无法通过http克隆存储库,git,gitlab,gitlab-ci,gitlab-ci-runner,Git,Gitlab,Gitlab Ci,Gitlab Ci Runner,我有在测试环境中运行的GitLab的最新docker映像,我遇到了GitLab runner的问题。无法通过HTTP链接进行克隆,产生以下消息: Running on runner-bd27e50b-project-1-concurrent-0 via machine... Cloning repository... Cloning into '/builds/my/awesome-project'... fatal: unable to access 'http://gitlab-ci-tok

我有在测试环境中运行的GitLab的最新docker映像,我遇到了GitLab runner的问题。无法通过HTTP链接进行克隆,产生以下消息:

Running on runner-bd27e50b-project-1-concurrent-0 via machine...
Cloning repository...
Cloning into '/builds/my/awesome-project'...
fatal: unable to access 'http://gitlab-ci-token:xxxxxx@127.0.0.1/my/awesome-project.git/': 
    Failed to connect to 127.0.0.1 port 80: Connection refused

ERROR: Build failed with: exit code 1

我使用
--debug
标志运行gitlab runner,并使用它正在尝试的确切地址(使用tact中的令牌),我可以很好地克隆存储库。我不知道为什么服务无法克隆存储库。runner executor也配置为“docker”。可能存在到该容器的某些端口映射问题?

我假设该问题可能与将运行程序注册为docker容器有关,从而导致本地主机地址无法解析到正确的机器(我正在启动运行程序的机器);在这种情况下,它可能解析为容器。在docker代理界面上使用主机的IP(对我来说是172.17.0.1),或者在注册运行程序时使用主机的真实地址而不是“localhost”,可以解决这个问题

编辑:这里有一个更详细的问题,因为我了解它和解决方案。加载的docker实例就像一个(非常)轻量级的虚拟机。Docker配置虚拟网络接口,如果从主机运行ifconfig,您将看到该接口:

user@pc:~> ifconfig
docker0   Link encap:Ethernet  HWaddr XXXX
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          ...
这是该接口上主机的IP地址。因此,如果您希望运行程序能够连接到在该主机上运行的服务,您不能将其指向localhost/127.0.0.1,因为从运行程序实例内部,它将路由到运行程序的“VM”,但GitLab没有在该运行程序“VM”内运行,而是在主机上运行,因此,运行程序无法与GitLab通信


解决方案是注册运行程序以在docker界面上指向主机的虚拟地址(对我来说),或者使用主机的公共IP或域名(如果您有并且可以公开访问)。只是不要将它发送到localhost或127.0.0.1,因为对于运行程序来说,它指向的是它的“VM”,而不是您的GitLab实例。

我知道这个问题已经很老了,但您可以使用稍微不同的方法(如果您使用docker runner处理相同的问题)

在域名下运行Gitlab-它可能是完全虚拟的,只需确保所有虚拟机都可以解析域名

然后修改/etc/gitlab runner/config.toml并将
额外的\u hosts
变量添加到
[runners.docker]
部分,其值为
[“您的\u域名:ip\u地址”]
。您还可以添加可能需要的任何其他主机

有关runner配置的更多信息,请访问

目前(最新版本的gitlab-9及以上)您需要使用带有正确ssl证书的https

一旦您使用添加新的跑步者https://... 一切都应该正常。

我也有同样的问题。你能详述你的答案吗?你到底是怎么纠正的?@Onlyjus我补充了一点解释,希望能有所帮助。TL;DR:在docker虚拟网络适配器上注册您的跑步者以指向您的主机IP。完美的解释!非常感谢你!我也有同样的问题。我只是将gitlab.rb config中的external_url变量设置为指向172.17.0.1(默认Docker网关),并消除了端口80上拒绝的连接错误通常
privileged=true
volumes=[“/var/run/Docker.sock:/var/run/Docker.sock”,“/cache”]
在同一部分中,我也可以用来构建图像。我在旧的CentOS 6.6机器上遇到同样的问题。升级
nss curl libcurl
,解决问题。似乎也提到了同样的问题