为什么我无法从localhost上的Gitlab CI连接到我的docker-compose服务

时间:2020-04-27 11:48:24

标签: docker docker-compose gitlab gitlab-ci dind

我正在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

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

我在Gitlab论坛上看到了很多答案,并且堆栈溢出,但没有一个解决了问题。怎么回事,如何解决/诊断问题?

1 个答案:

答案 0 :(得分:0)

首先,论坛上的许多答案都指出了我最终使用的解决方案。在实践中,我想检查该服务的原因是为了让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}}{{.IPAddress}}{{end}}' app1_test
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 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}}{{.IPAddress}}{{end}}' app1_test
172.20.0.3172.19.0.4

$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' app2_test
172.20.0.2172.19.0.3

因此,其他有关使用docker的答案均无效,因为它指向172.17.0.3,但是我的容器都没有。现在,我应该可以对curl进行172.20.0.2:8080了,但是我没有尝试过,因为那时我深信自己最好在容器中运行curl

我实际上不知道为什么会有两个这样的IP地址,但是有些兔子只是转弯而你不知道吗?