Cómo encontrar la URL de docker-in-docker ejecutándose en gitlab
Tengo una nueva aplicaciónhttps://gitlab.com/connorbutch/reading-comprehension/-/tree/5-implement-glue-codedonde actualmente estoy trabajando fuera de la rama 5-implement-glue-code ) que se está ejecutando en la ventana acoplable (por ahora, eventualmente se ejecutará en knative). La aplicación se compila (tanto localmente como en el servidor gitlab ci / cd) e implementa una imagen de la ventana acoplable (tanto localmente como en el servidor gitlab ci / cd). También pasa las pruebas de aceptación a nivel local. Sin embargo, cuando ejecuta las pruebas de aceptación en el servidor gitlab ci / cd, parece que la implementación de la ventana acoplable no está expuesta / teniendo lugar en otro host / url .....?
Si desea ejecutar esto localmente, puede hacerlo fácilmente con un solo comando (después de clonar / cd en el repositorio):) docker run -i --rm -p 8080:8080 registry.gitlab.com/connorbutch/reading-comprehension & ./wait-for-it-2.sh. Si no es así, puede volver a crear mediante cd en el repositorio y ejecutar./build-it.sh
Aquí hay una salida de la compilación fallida en el servidor de gitlab (cuando se ejecuta el comando mencionado anteriormente docker run -i --rm -p 8080:8080 registry.gitlab.com/connorbutch/reading-comprehension & ./wait-for-it-2.sh). Puede encontrar esta salida aquí: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
Como se mencionó anteriormente, funciona localmente. Aquí está la salida cuando se ejecuta localmente (usando el mismo comando)
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
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: */*
Aquí está mi .gitlab-ci.yml (que se encuentra en: 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
La salida de docker ps dentro del servidor de gitlab parece mostrar lo que espero (a continuación):
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
A continuación se proporcionan extractos relevantes de Docker Inspect (en el contenedor que se ejecuta en el servidor de gitlab ci):
"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
}
}
}
Mi sospecha es que la ventana acoplable en el servicio de la ventana acoplable que se ejecuta en el servidor gitlab ci se está ejecutando en otro host o no está configurada para manejar el tráfico. ¿Alguien tiene alguna idea sobre qué podría estar causando esto?
Gracias Connor
Respuestas
Intente usar docker: 8080 para conectarse en lugar de localhost. No estoy totalmente seguro, pero creo que tuve este problema con dind. En esta situación, su servicio no está expuesto al host, sino al servicio de dind. Espero que esto resuelva su problema.