为啥我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务

Posted

技术标签:

【中文标题】为啥我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务【英文标题】:Why can't I connect to my docker-compose service from Gitlab CI on localhost为什么我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务 【发布时间】:2020-08-10 23:14:03 【问题描述】:

我正在 Gitlab.com 的 CI 运行器上运行它。我的.gitlab-ci.yml 的截断版本是

image: docker/compose:1.25.5
services:
  - docker:dind
Test:
  - script/test

我的脚本/测试的截断版本是

docker-compose run -d --name app1_test -p 8080:8080 app1 bash
docker-compose run -d --name app2_test -p 8081:8080 app2 bash
curl -s ORIGIN:8081/healthz

我发现无论我的 ORIGIN 是localhostdocker0.0.0.0 等,我总是得到can't connect to remote host (0.0.0.0): Connection refused

我在 Gitlab 论坛和堆栈溢出上看到了很多答案,但没有一个能解决问题。发生了什么?如何解决/诊断问题?

【问题讨论】:

【参考方案1】:

首先,论坛上的许多答案都指出了我最终采用的解决方案。在实践中,我想检查该服务的原因是我的 docker-compose.yml 中的另一个服务可以与之对话。那么为什么不直接使用该服务进行 ping 操作呢?然后你得到一个更好的测试,你可以使用 Docker 的自动 DNS 和 --name 选项。

docker exec -t app1_test curl -s app2_test:8080/healthz

现在,如果这仍然困扰您,因为您只是想知道为什么会发生这种情况以及如何诊断/解决它,或者您确实需要从主机与容器交谈。我建议您检查脚本中的一些内容

cat /etc/hosts
docker inspect -f 'range .NetworkSettings.Networks.IPAddressend' app1_test
docker inspect -f 'range .NetworkSettings.Networks.IPAddressend' app2_test

让我惊讶的事情

 $ cat /etc/hosts
 127.0.0.1  localhost
 ::1    localhost ip6-localhost ip6-loopback
 fe00::0    ip6-localnet
 ff00::0    ip6-mcastprefix
 ff02::1    ip6-allnodes
 ff02::2    ip6-allrouters
 127.0.0.1  0hshit.hopto.org
 127.0.0.1  daymndaymn.myftp.org
 127.0.0.1  loba.webhop.me
 172.17.0.3 docker 26f99c2de716 runner-fa6cab46-project-18056856-concurrent-0-3b5b3ec1f3220cec-docker-0
 172.17.0.4 runner-fa6cab46-project-18056856-concurrent-0

$ docker inspect -f 'range .NetworkSettings.Networks.IPAddressend' app1_test
172.20.0.3172.19.0.4

$ docker inspect -f 'range .NetworkSettings.Networks.IPAddressend' app2_test
172.20.0.2172.19.0.3

所以关于使用docker 的其他答案不起作用,因为它指向 172.17.0.3 但我的容器都不在那里。我现在应该能够执行 curl172.20.0.2:8080 并且没问题,但我没有尝试,因为那时我说服自己最好在容器中运行 curl

我其实不知道为什么会有这样的两个IP地址,但是有些兔子只是在你不跟随的洞里转了一圈你知道吗?

【讨论】:

以上是关于为啥我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Gitlab 无法从本地网络导入存储库,状态码为 128?

无法连接到本地主机上的 XAMPP 服务器

phonegap 无法与本地主机上的 xampp 服务器连接

GitLab CI 构建失败并出现错误,一些本地引用无法更新

不是本地主机上的有效域 facebook

Websocket wss 连接在本地主机上的 Firefox 89 中不起作用