【问题标题】:gitlab-ci.yml & docker-in-docker (dind) & curl returns connection refused on shared runnergitlab-ci.yml & docker-in-docker (dind) & curl 在共享运行器上返回连接被拒绝
【发布时间】:2019-05-03 09:24:27
【问题描述】:

我正在尝试创建一个简单的 GitLab CI,在其中使用 docker-compose up 启动容器,然后尝试使用 curl 访问它,最后使用 docker-compose down 将其拆除。 docker-compose up 旋转起来非常好,我可以使用 docker ps -a 看到容器启动,但是当我卷曲时,我得到“连接被拒绝”。

这是我的 gitlab-ci.yml

image: docker

services:
 - docker:dind

before_script:
 - apk add --update python py-pip python-dev && pip install docker-compose
 - apk add --update curl && rm -rf /var/cache/apk/*

stages:
 - test

test:
 stage: test
 script:
  - docker-compose up -d
  - docker ps -a
  - curl http://localhost:5000/api/values
  - docker-compose down

这是跑步者的日志

Image for service testwebapp was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating test-container ... 

Creating test-container ... done
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                    NAMES
3423adfb1f3b        mytestwebapp        "dotnet TestWebApp.d…"   1 second ago        Up Less than a second   0.0.0.0:5000->5000/tcp   test-container
$ curl http://localhost:5000/api/values
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (7) Failed to connect to localhost port 5000: Connection refused
ERROR: Job failed: exit code 7

Docker 编写:

version: '3.4'

services:
  testwebapp:
    image: mytestwebapp
    build:
      context: .
      dockerfile: TestWebApp/Dockerfile
    container_name: test-container

Docker 撰写覆盖:

version: '3.4'

services:
  testwebapp:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://0.0.0.0:5000
    ports:
      - "5000:5000"

【问题讨论】:

  • 为什么你的容器的命令是dotnet TestWebApp.d…。它是否正确?如果是,您能否添加更多详细信息。
  • 你好@OrtomalaLokni,这是docker下应用程序的启动。这是正确的,因为这是用于使用 dotnet cli 启动 Web 应用程序的命令。这是 docker 文件中以下部分的结果: FROM base AS final WORKDIR /app COPY --from=publish /app 。入口点 ["dotnet", "TestWebApp.dll"]
  • 错误的来源显然是curl 命令,但是我想如果没有有关您的docker-compose.yml 文件的更多详细信息,将无法解决此问题。你能在你的问题中添加它吗?
  • 您是否还注意在您的代码中硬编码特殊 IP 0.0.0.0?否则您可能会遇到与stackoverflow.com/a/52729289/9164010 相同的问题
  • 您好 ErikMD,我添加了 docker-compose.yml 和 docker-compose-override.yml。如您所见,ASPNETCORE_URLS 设置为 0.0.0.0 希望这有助于更好地澄清事情:)

标签: docker curl docker-compose gitlab-ci docker-in-docker


【解决方案1】:

更新您的gitlab-ci.yml 文件:

  1. 在运行curl 之前设置sleep 15。 15 是您的服务应该准确启动的任意时间段(以秒为单位)。

  2. 接下来有2个选项:https://docs.gitlab.com/ee/ci/services/#how-services-are-linked-to-the-job:

选项 1: 将curl http://localhost:5000/api/values 中的localhost 替换为docker,就像这样curl http://docker:5000/api/values

选项 2

services:
  - name: docker:dind
    alias: localhost

【讨论】:

  • 我尝试了这两个选项,但仍然遇到同样的问题:(连接被拒绝
  • 我认为你应该在运行 curl 之前运行 sleep 15。 15 是您的服务应该准确启动的任意时间段(以秒为单位)。
  • @IlyaPetukhov 你是我今天的英雄 :)
  • 嗨,你是如何决定 docker 的端口的?
  • 这是您的网络应用程序的端口。
猜你喜欢
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 2021-06-24
  • 2021-07-08
  • 2022-01-22
  • 2022-06-14
  • 2021-09-06
相关资源
最近更新 更多