如何在gitlab中找到docker-in-docker 运行的url

How to find url of docker-in-docker running in gitlab

我有一个新的应用程序(https://gitlab.com/connorbutch/reading-comprehension/-/tree/5-implement-glue-code 我目前在分支 5-implement-glue-code ) 即 运行ning 在 docker 中(目前,它最终将在 knative 中 运行 )。应用程序构建(在本地和在 gitlab ci/cd 服务器上),并部署一个 docker 图像(在本地和在 gitlab ci/cd 服务器上)。它还通过本地验收测试。但是,当它 运行 在 gitlab ci/cd 服务器上进行验收测试时,docker 部署似乎没有 exposed/taking 放置在另一个 host/url 上... ..?

如果你想在本地运行这个,你可以用一个命令轻松地做到这一点(在cloning/cd到repo之后:docker run -i --rm -p 8080:8080 registry.gitlab.com/connorbutch/reading-comprehension & ./wait-for-it-2.sh)。如果没有,您可以通过 cd 到 repo 和 运行ning ./build-it.sh

重新创建

这是 gitlab 服务器上构建失败的输出(当 运行 执行上述命令时 docker run -i --rm -p 8080:8080 registry.gitlab.com/connorbutch/reading-comprehension & ./wait-for-it-2.sh)。您可以在此处找到此输出:https://gitlab.com/connorbutch/reading-comprehension/-/jobs/714867229

_  ____  __  _____   ___  __ ____  ______ 
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2020-09-01 22:25:39,509 INFO  [io.quarkus] (main) reading-comprehension-server-quarkus-impl    1.0.0-SNAPSHOT native (powered by Quarkus 1.7.0.Final) started in 0.015s. Listening on:    http://0.0.0.0:8080
2020-09-01 22:25:39,509 INFO  [io.quarkus] (main) Profile prod activated.
2020-09-01 22:25:39,510 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy, resteasy-jackson, smallrye-context-propagation]
Made request to readiness endpoint (0.0.0.0:8080/health/readiness) and received status code of 000
*   Trying 0.0.0.0...
* TCP_NODELAY set
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* connect to     0.0.0.0 port 8080 failed: Connection refused
* Failed to connect to 0.0.0.0 port 8080: Connection refused
* Closing connection 0

如上所述,它在本地工作。这是 运行 在本地(使用相同的命令)

时的输出
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2020-09-01 23:06:31,525 INFO  [io.quarkus] (main) reading-comprehension-server-quarkus-impl 1.0.0-SNAPSHOT native (powered by Quarkus 1.7.0.Final) started in 0.013s. Listening on: http://0.0.0.0:8080
2020-09-01 23:06:31,526 INFO  [io.quarkus] (main) Profile prod activated. 
2020-09-01 23:06:31,526 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy, resteasy-jackson, smallrye-context-propagation]
//tons of debug logs ommitted for brevity, but you can easily recreate them locally
2020-09-01 23:06:32,112 INFO  [com.con.rea.fil.ContainerResponseFilterLoggingImpl] (executor-thread-1) Request received Request method GETRequest headers Accept: */*
Host: 0.0.0.0:8080
User-Agent: curl/7.58.0Request cookies Query parameters Request url http://0.0.0.0:8080//health/readiness with responseResponse body class                                                                  ReadinessHealthResponse {
  isAvailable: true
  availableDependencies: [class DownstreamDependency {
      name: SystemPropertyChecker
      isAvailable: true
   }, class DownstreamDependency {
    name: MemoryChecker
    isAvailable: true
}]
unavailableDependencies: []
}

Response headers Content-Type: application/jsonResponse status code 200

Made request to readiness endpoint (0.0.0.0:8080/health/readiness) and received status code of 200
*   Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 8080 (#0)
> GET /health/readiness HTTP/1.1
> Host: 0.0.0.0:8080
> User-Agent: curl/7.58.0
> Accept: */*

这是我的.gitlab-ci.yml(位于:https://gitlab.com/connorbutch/reading-comprehension/-/blob/5-implement-glue-code/.gitlab-ci.yml

image: connorbutch/gradle-and-java-11:latest

variables:
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"
  DOCKER_HOST: "tcp://docker:2375"
  DOCKER_DRIVER: "overlay2"

before_script:
  - export GRADLE_USER_HOME=`pwd`/.gradle

#By running this as the same service for all build pods, I hope to save an extra docker build
services:
  - docker:stable-dind

stages:
  - build
  - docker_build
  - acceptance_test

unit_test:
  stage: build
  script: ./gradlew check
  cache:
    key: "$CI_COMMIT_REF_NAME"
    policy: pull
    paths:
      - build
      - .gradle

build:
  stage: build
  script:
    - ./gradlew clean quarkusBuild
    - ./gradlew clean build -Dquarkus.package.type=native -Dquarkus.native.container-build=true 
    key: "$CI_COMMIT_REF_NAME"
    policy: push
    paths:
      - build
      - .gradle
  artifacts:
    paths:
      - reading-comprehension-server-quarkus-impl/build/

docker_build:
  stage: docker_build
  script:
    - cd reading-comprehension-server-quarkus-impl
    - docker build -f infrastructure/Dockerfile -t registry.gitlab.com/connorbutch/reading-comprehension .
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker push registry.gitlab.com/connorbutch/reading-comprehension

acceptance_test:
  stage: acceptance_test
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker run -i --rm -p 8080:8080 registry.gitlab.com/connorbutch/reading-comprehension & ./wait-for-it-2.sh
    - gradle acceptanceTest

gitlab 服务器中 docker ps 的输出似乎显示了我的预期(如下所示):

CONTAINER ID        IMAGE                                                          COMMAND                  CREATED             STATUS                  PORTS                    NAMES
d607ecf87991        registry.gitlab.com/connorbutch/reading-comprehension   "./application -Dqua…"   4 seconds ago       Up Less than a second   0.0.0.0:8080->8080/tcp   reading-comprehension

相关excerps from docker inspect (on the container 运行ning on the gitlab ci server) 如下:

 "State": {
        "Status": "running",
        "Running": true,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 207,
        "ExitCode": 0,
        "Error": "",
        "StartedAt": "2020-09-02T00:31:35.621438213Z",
        "FinishedAt": "0001-01-01T00:00:00Z"
    },

  "NetworkMode": "default",
        "PortBindings": {
            "8080/tcp": [
                {
                    "HostIp": "",
                    "HostPort": "8080"
                }
            ]
        },

"NetworkSettings": {
        "Bridge": "",
        "SandboxID": "c18baeec94cb531865994db3184d37949e4c3c34064373ac5d31c49b9eec1d25",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "8080/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "8080"
                }
            ]
        },
        "SandboxKey": "/var/run/docker/netns/c18baeec94cb",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "246efed470908aede697bce92f55fb5f58885634eb06ecdbe90686d2beddd41b",
        "Gateway": "172.18.0.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "172.18.0.2",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "MacAddress": "02:42:ac:12:00:02",
        "Networks": {
            "bridge": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": null,
                "NetworkID": "d543b622c078986bab878111bb8bbdfe70f4b60fb384c5a7a175295c13ae9d68",
                "EndpointID": "246efed470908aede697bce92f55fb5f58885634eb06ecdbe90686d2beddd41b",
                "Gateway": "172.18.0.1",
                "IPAddress": "172.18.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "02:42:ac:12:00:02",
                "DriverOpts": null
            }
        }
    }

我怀疑cion 是 docker in docker service 运行ning in gitlab ci server 运行ning on另一台主机,或未设置为处理流量。有没有人知道可能导致这种情况的原因?

谢谢, 康纳

尝试使用 docker:8080 连接而不是本地主机。我不太确定,但我想我对 dind 有这个问题。在这种情况下,您的服务不会暴露给主机,而是暴露给服务。希望这能解决您的问题。