docker - maven:来自 gitlab-runner 的最新图像,带有 docker 执行器“无法连接到 gitlab 连接被拒绝”,使用 docker-compose
问题描述
我在 Mac 上使用 gitlab/gitlab-ce:latest docker 映像来构建一些自定义 gitlab 运行器,它将跨越自定义 maven 映像。目前我在使用 docker compose 设置基本环境时遇到问题
请参阅下面的 docker-compose.yml。
version: '3.7'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
# external_url 'https://gitlab.example.com'
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '8080:80'
- '8443:443'
- '2022:22'
volumes:
- '${HOME}/gitlab/config:/etc/gitlab'
- '${HOME}/gitlab/logs:/var/log/gitlab'
- '${HOME}/gitlab/data:/var/opt/gitlab'
networks:
default:
aliases:
- 'gitlab.example.com'
gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
hostname: 'runner.example.com'
restart: always
volumes:
- '${HOME}/gitlab-runner/config:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'
depends_on:
- gitlab
networks:
default:
aliases:
- 'runner.example.com'
目前我可以在 gitlab 服务器中成功注册 runner 并发出合并请求
要注册跑步者,我在正在运行的 docker gitlab-runner 容器中使用以下命令。
#[host] docker exec -it <gitlab-runner container-id> bash
#[gitlab-runner] gitlab-runner register \
--non-interactive \
--url http://gitlab.example.com \
--registration-token "xxxxxx" \
--description "docker-maven-runner" \
--tag-list "docker" \
--run-untagged="true" \
--executor "docker"\
--docker-image "maven:latest"
但是管道总是失败并出现以下错误
Running with gitlab-runner 12.10.2 (c5874a4b)
on docker-maven-runner 7zhsdXRx
Preparing the "docker" executor
00:02
Using Docker executor with image maven:latest ...
Pulling docker image maven:latest ...
Using docker image sha256:44e27997f4c0493779146fc89ab571f5f829ac6538d0d7d40cbe9fe2b36d4a60 for maven:latest ...
Preparing environment
00:02
Running on runner-7zhsdxrx-project-2-concurrent-0 via runner.example.com...
Getting source from Git repository
00:01
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /builds/hramanmcg/sonar-java-test/.git/
fatal: unable to access 'http://gitlab.example.com/hramanmcg/sonar-java-test.git/': Failed to connect to gitlab.example.com port 80: Connection refused
Uploading artifacts for failed job
00:02
ERROR: Job failed: exit code 1
我的猜测是我需要一些方法来指定网络,所以当跑步者跨越容器时,它将连接到正确的网络,但我找不到如何做到这一点
一些调试信息
#docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------------------------------------------
sonar-assistant-docker_gitlab-runner_1 /usr/bin/dumb-init /entryp ... Up
sonar-assistant-docker_gitlab_1 /assets/wrapper Up (healthy) 0.0.0.0:2022->22/tcp, 0.0.0.0:8443->443/tcp, 0.0.0.0:8080->80/tcp
#docker network ls
NETWORK ID NAME DRIVER SCOPE
2fb969181eb3 bridge bridge local
0f73fd4baa79 host host local
96216f1d093e none null local
7b120474fd1b sonar-assistant-docker_default bridge local
解决方案
回答我自己的问题。
我在注册中找到了一个设置 docker 网络的选项。使用--docker-network-mode
.
我不确定如何在交互模式下使用它,但在非交互模式下,以下对我有用
#[host] docker exec -it <gitlab-runner container-id> bash
#[gitlab-runner] gitlab-runner unregister --all-runners
#[gitlab-runner] gitlab-runner register \
--non-interactive \
--url http://gitlab.example.com \
--registration-token "xxxx" \
--description "docker-maven-runner" \
--executor "docker" \
--docker-image "maven:latest" \
--docker-network-mode sonar-assistant-docker_default
使用 GitLab Community Edition 12.10.2 和 Gitlab Runner 12.10.2 和 Docker desktop 2.3.0
推荐阅读
- java - 如何使用广播接收器停止我的服务
- javascript - sqlite将变量输出到js
- javascript - 异步/等待来自承诺的返回变量
- flutter - Dispose 没有完全dispose
- python - 使用 validation_split 拟合的 Keras 比使用 validation_data 获得更高的结果
- cmake - CMake:将库名称传递给祖父母,但前提是祖父母存在
- php - Laravel - 多个选项的表单验证
- android - 所有活动的 Android 横向
- python - 什么定义了 Excel.Application COM 对象连接到哪个 Excel 实例?
- haskell - Haskell 中的函数缩减是如何工作的?