windows下使用docker执行器并配置 hosts 解析

devtools/2025/1/21 16:47:10/

本篇目录

    • 1. 问题背景
    • 2. 环境准备
      • 2.1 云上开通windows 2022 英文版机器
        • 2.1.1 安装 git
        • 2.1.2 安装 runner
        • 2.1.3 装docker
        • 2.1.4 注册runner并使用docker执行器
    • 3. 项目信息
      • 3.1 编写window bat脚本
      • 3.2 项目.gitlab-ci.yml文件
    • 4. 测试结论
      • 4.1 运行流水线
    • 5. troubleshooting
      • 问题1:Job failed: invalid volume specification: "/cache"
      • 问题2:Windows does not support privileged mode (docker.go:652:0s)
      • 问题3:extra_hosts配置生效问题

该实践来自于客户的一个真实需求

在这里插入图片描述

1. 问题背景

客户在 gitlab-runner 是使用的 windows 服务器上的 docker,客户表示在配置了extra_hosts后,发现并没有生效,无法实现某些需求。

2. 环境准备

windows_2022__8">2.1 云上开通windows 2022 英文版机器

2.1.1 安装 git

参考:安装git

2.1.2 安装 runner

参考:安装runner

docker_13">2.1.3 装docker

参考: windows-docker

docker_15">2.1.4 注册runner并使用docker执行器

runner的配置文件

concurrent = 1
check_interval = 0
connection_max_age = "15m0s"
shutdown_timeout = 0[session_server]session_timeout = 1800[[runners]]name = "windows"url = "https://jihulab.com"id = 31472token = "glrt-xxxxxxxxxx"token_obtained_at = 2024-08-06T10:34:29Ztoken_expires_at = 0001-01-01T00:00:00Zexecutor = "docker"[runners.custom_build_dir][runners.cache]MaxUploadedArchiveSize = 0[runners.cache.s3][runners.cache.gcs][runners.cache.azure][runners.docker]# extra_hosts = ["www.baidu.com:10.100.10.10"] # 经过反复多次的测试,发现该配置在windows下的docker执行器中不生效tls_verify = falseimage = "ruby:2.7"privileged = falsedisable_entrypoint_overwrite = falseoom_kill_disable = falsedisable_cache = falsevolumes = ["C:\\cache"] # 需要将["/cache"] 改成["C:\\cache"]shm_size = 0network_mtu = 0

3. 项目信息

3.1 编写window bat脚本

cat test.bat

@echo off
setlocal
rem 检查管理员权限
openfiles >nul 2>&1
if %errorlevel% neq 0 (echo 提升到管理员权限...powershell start-process -filepath '%0' -verb runasexit /b
)
rem 定义要添加的条目
set "hostEntry=192.168.10.100 www.baidu.com"
rem 检查条目是否已经存在
findstr /c:"%hostEntry%" %windir%\System32\drivers\etc\hosts >nul 2>&1
if %errorLevel% neq 0 (rem 添加条目到hosts文件echo %hostEntry% >> %windir%\System32\drivers\etc\hostsecho 条目已添加到hosts文件。
) else (echo 条目已存在于hosts文件中。
)
endlocal

3.2 项目.gitlab-ci.yml文件

cat .gitlab-ci.yml

default:tags:- windowsbuild:stage: buildimage: mcr.microsoft.com/dotnet/framework/sdk:4.8.1-windowsservercore-ltsc2022script:- ./test.bat- ping www.baidu.com

4. 测试结论

4.1 运行流水线

说明写入hosts后,解析生效
在这里插入图片描述
修改脚本(解析改成192.168.10.100和10.100.10.10),再次运行,如下两次结论:
192.168.10.100 无法解析
在这里插入图片描述
10.100.10.10 可以解析
在这里插入图片描述

5. troubleshooting

问题1:Job failed: invalid volume specification: “/cache”

在这里插入图片描述
原因:这个是由于默认runner注册的时候,volume的路径采用的是linux的路径方式,因为需要修改为windows的路径方式,将["/cache"]修改为["c:\\cache"]

dockergo6520s_105">问题2:Windows does not support privileged mode (docker.go:652:0s)

在这里插入图片描述
原因:这个是由于windows下runner的docker执行器不支持特权模式,因此将配置文件修改为privileged = trueprivileged = false

问题3:extra_hosts配置生效问题

extra_hosts本身是 docker 执行器的有效参数,但是通过在windows 上的 docker 和 linux 上的 docker 执行器上对比,linux 上是可以是生效的,但是 windows 上是不可以的,所以这里需要特殊说明下。


http://www.ppmy.cn/devtools/152379.html

相关文章

Vue2:el-tree用scope slot为每一个节点添加一个鼠标悬浮时出现的右对齐的按钮

el-tree中,每一个节点后面添加一个按钮,响应除节点点击事件之外的操作,要求: 1、按钮在鼠标悬浮在该节点之上时才出现 2、按钮右对齐 实现如下。 1、为每个节点添加按钮 从官网说明来看,有两种方式添加按钮,render-content和 scoped slot,我使用的是scoped slot方式…

小红书用户作品列表 API 系列,返回值说明

item_search_shop_video-获得某书用户作品列表 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_sea…

VB.net实战(VSTO):解决WPS Ribbon图标灰色背景

问题:用VSTO制作插件,在MS Office中图标显示正常,但在WPS Office中图标显示为灰色背景 原因:使用的图标是纯透明背景的,这样的图标在WPS中会变为灰色背景。 以下这个解决办法是我自己摸索出来的,对您有用的…

你了解什么是股指期货贴水套利吗?

首先,咱们来聊聊什么是股指期货。股指期货,简单来说,就是一种以股价指数为“标的物”的期货合约。就像咱们平时买卖的商品期货,比如大豆、原油那些,只不过这里交易的“商品”是股价指数,是一种标准化的金融…

我的常用vim操作

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 我的常用vi操作 1. 文件打开与保存 打开文件操作:vi xxx.h 查看文件,不修改,:view xxx.h 写入并保存::wq 或 :x 有修改强制退出,不保存&#x…

Golang学习笔记_27——单例模式

Golang学习笔记_24——泛型 Golang学习笔记_25——协程Golang学习笔记_25——协程 Golang学习笔记_26——通道 文章目录 单例模式1. 介绍2. 应用场景3. 实现3.1 饿汉式3.2 懒汉模式 源码 单例模式 1. 介绍 单例模式是一种创建型设计模式,它确保一个类只有一个实例…

C语言:-三子棋游戏代码:分支-循环-数组-函数集合

思路分析: 1、写菜单 2、菜单之后进入游戏的操作 3、写函数 实现游戏 3.1、初始化棋盘函数,使数组元素都为空格 3.2、打印棋盘 棋盘的大概样子 3.3、玩家出棋 3.3.1、限制玩家要下的坐标位置 3.3.2、判断玩家要下的位置是否由棋子 3.4、电脑出棋 3.4.1、…

Nginx调优

Nginx 是一个高性能的反向代理服务器和负载均衡器,在处理大量并发请求时表现出色。但是,随着系统负载的增加,Nginx 的性能可能受到多方面的影响,因此进行适当的调优至关重要。以下是 Nginx 调优的几个方向和关键点: 1…