Cách tìm url của docker-in-docker đang chạy trong gitlab
Tôi có một ứng dụng mới (https://gitlab.com/connorbutch/reading-comprehension/-/tree/5-implement-glue-codenơi tôi hiện đang làm việc với nhánh 5-implement-keo-code ) đang chạy trong docker (hiện tại, nó cuối cùng sẽ chạy trong knative). Ứng dụng xây dựng (cả cục bộ và trên máy chủ gitlab ci / cd) và triển khai hình ảnh docker (cả cục bộ và trên máy chủ gitlab ci / cd). Nó cũng vượt qua các bài kiểm tra chấp nhận tại địa phương. Tuy nhiên, khi nó chạy các bài kiểm tra chấp nhận trên máy chủ gitlab ci / cd, có vẻ như việc triển khai docker không được tiếp xúc / đang diễn ra trên một máy chủ / url khác .....?
Nếu bạn muốn chạy điều này cục bộ, bạn có thể dễ dàng thực hiện việc này bằng một lệnh duy nhất (sau khi nhân bản / cd vào repo) docker run -i --rm -p 8080:8080 registry.gitlab.com/connorbutch/reading-comprehension & ./wait-for-it-2.sh:). Nếu không, bạn có thể tạo lại bằng cd vào repo và chạy./build-it.sh
Đây là đầu ra của bản dựng không thành công trên máy chủ gitlab (khi chạy lệnh được đề cập ở trên docker run -i --rm -p 8080:8080 registry.gitlab.com/connorbutch/reading-comprehension & ./wait-for-it-2.sh). Bạn có thể tìm thấy kết quả này ở đây: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
Như đã đề cập ở trên, nó hoạt động cục bộ. Đây là kết quả đầu ra khi chạy cục bộ (sử dụng cùng một lệnh)
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
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: */*
Đây là .gitlab-ci.yml của tôi (tìm thấy tại: 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
Đầu ra của docker ps trong máy chủ gitlab dường như hiển thị những gì tôi mong đợi (được đưa ra bên dưới):
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
Dưới đây là các đoạn trích liên quan từ việc kiểm tra docker (trên vùng chứa chạy trên máy chủ 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
}
}
}
Nghi ngờ của tôi là bộ docker trong dịch vụ docker chạy trong máy chủ gitlab ci đang chạy trên một máy chủ khác hoặc không được thiết lập để xử lý lưu lượng. Có ai có bất kỳ ý tưởng về những gì có thể gây ra điều này?
Cảm ơn, Connor
Trả lời
Hãy thử sử dụng docker: 8080 để kết nối thay vì localhost. Tôi không hoàn toàn chắc chắn nhưng tôi nghĩ rằng tôi đã gặp vấn đề này với dind. Trong tình huống này, dịch vụ của bạn không được hiển thị với máy chủ mà là dịch vụ dind. Hy vọng điều này sẽ giải quyết vấn đề của bạn.