我正在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
我发现无论我的起源是localhost
,docker
,0.0.0.0
等。我总是得到can't connect to remote host (0.0.0.0): Connection refused
我在Gitlab论坛上看到了很多答案,并且堆栈溢出,但没有一个解决了问题。怎么回事,如何解决/诊断问题?
答案 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地址,但是有些兔子只是转弯而你不知道吗?