无法连接Gitlab CI的拆离容器
我启动了一个HTTP服务器的分离式Docker容器,并尝试从管道脚本连接到它,但得到了连接错误:
curl: (28) Failed to connect to 172.17.0.3 port 9000 after 129268 ms: Couldn't connect to server
下面是重现连接问题的完整.gitlab-ci.yml
:
stages:
- Tests
with_server:
image: docker:23.0.2
services:
- docker:23.0.2-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
stage: Tests
before_script:
- apk add --update --no-cache curl python3 && ln -sf $(which python3) /usr/bin/python
- docker info
script:
- docker run --rm --detach --name that_server python:3.11-slim-bullseye python3 -m http.server 9000
# that inspect is for extracting IP of that_server
- curl $(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' that_server):9000
after_script:
- docker rm -f that_server
docker-dind
用于根据gitlab指南在CI管道中调用docker命令。这应该允许构建和运行容器,然后连接到它。
旁证:
- 当我在本地运行它(
docker run
&&curl
)时,问题不存在。 docker build
工程docker run hello-world
工程- 创建网络并将容器连接到那里并没有帮助
- 创建另一个容器并从其连接起作用-例如,使用以下命令:
docker run --rm --name that_client python:3.11-slim-bullseye python -c "from urllib import request; req=request.Request(\"http://$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' that_server):9000\");print(request.urlopen(req).read())"
问题是当我试图从gitlab-runner
执行器的“主机”连接时,我只是不知道为什么以及如何获得“连接”到分离容器的可能性。
这样安排的目的是在一个容器中启动我的应用程序,然后对它执行测试。你知道我在这里错过了什么吗?谢谢
1条答案
按热度按时间yrefmtwq1#
您正在使用
docker:dind
服务,该服务将启动容器。您的应用程序应该可以在docker:9000
而不是容器IP下访问。更新:
我注意到你还没有Map端口,你还需要在
docker run
命令中添加-p 9000:9000
。还需要在curl之前添加一个轻微的超时,例如sleep 30
,因为容器在dind中启动需要一些时间。