Comment trouver l'URL de docker-in-docker s'exécutant dans gitlab
J'ai une nouvelle application (https://gitlab.com/connorbutch/reading-comprehension/-/tree/5-implement-glue-codeoù je travaille actuellement à partir de la branche 5-implémenter-glue-code ) qui s'exécute dans docker (pour l'instant, il fonctionnera éventuellement en knative). L'application se construit (à la fois localement et sur le serveur gitlab ci / cd) et déploie une image docker (à la fois localement et sur le serveur gitlab ci / cd). Il passe également les tests d'acceptation localement. Cependant, lorsqu'il exécute les tests d'acceptation sur le serveur gitlab ci / cd, il semble que le déploiement de docker n'est pas exposé / se déroule sur un autre hôte / url .....?
Si vous souhaitez l'exécuter localement, vous pouvez facilement le faire avec une seule commande (après le clonage / cd vers le dépôt):) docker run -i --rm -p 8080:8080 registry.gitlab.com/connorbutch/reading-comprehension & ./wait-for-it-2.sh. Sinon, vous pouvez recréer par cd vers le dépôt et en cours d'exécution./build-it.sh
Voici une sortie de la compilation défaillante sur le serveur gitlab (lors de l'exécution de la commande mentionnée ci-dessus docker run -i --rm -p 8080:8080 registry.gitlab.com/connorbutch/reading-comprehension & ./wait-for-it-2.sh). Vous pouvez trouver cette sortie ici: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
Comme mentionné ci-dessus, cela fonctionne localement. Voici la sortie lors de l'exécution locale (en utilisant la même commande)
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
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: */*
Voici mon .gitlab-ci.yml (trouvé à: 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 sortie de docker ps dans le serveur gitlab semble montrer ce que j'attends (donné ci-dessous):
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
Des extraits pertinents de docker inspect (sur le conteneur s'exécutant sur le serveur gitlab ci) sont donnés ci-dessous:
"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
}
}
}
Je soupçonne que le docker du service docker s'exécutant sur le serveur gitlab ci s'exécute sur un autre hôte, ou n'est pas configuré pour gérer le trafic. Quelqu'un a-t-il des idées sur ce qui pourrait en être la cause?
Merci, Connor
Réponses
Essayez d'utiliser docker: 8080 pour vous connecter au lieu de localhost. Je ne suis pas tout à fait sûr mais je pense que j'ai eu ce problème avec Dind. Dans cette situation, votre service n'est pas exposé à l'hôte mais au service dind. J'espère que cela résoudra votre problème.