docker 连接到gitlab CI管道中的分离容器

dced5bon  于 2023-04-20  发布在  Docker
关注(0)|答案(1)|浏览(166)

无法连接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执行器的“主机”连接时,我只是不知道为什么以及如何获得“连接”到分离容器的可能性。
这样安排的目的是在一个容器中启动我的应用程序,然后对它执行测试。你知道我在这里错过了什么吗?谢谢

yrefmtwq

yrefmtwq1#

您正在使用docker:dind服务,该服务将启动容器。您的应用程序应该可以在docker:9000而不是容器IP下访问。

更新:

我注意到你还没有Map端口,你还需要在docker run命令中添加-p 9000:9000。还需要在curl之前添加一个轻微的超时,例如sleep 30,因为容器在dind中启动需要一些时间。

相关问题