Alpine Linux 部署 SmokePing 网络监控

本文介绍如何在 Alpine Linux 系统上部署 SmokePing 网络延迟监控工具,使用 Caddy 作为 Web 服务器,FCGIWrap 处理 CGI 脚本。

系统要求

  • Alpine Linux 3.18+
  • 2GB+ RAM(推荐 4GB+)
  • 20GB+ 磁盘空间
  • 网络连接正常

安装步骤

1. 安装必要软件包

# 更新软件包索引
apk update

# 安装 SmokePing 及相关组件
apk add fcgiwrap fcgiwrap-openrc caddy smokeping smokeping-openrc

# 创建 fcgiwrap 服务用户
useradd -r fcgiwrap-openrc

2. 创建数据目录

# 创建 SmokePing 数据目录
mkdir -p /var/lib/smokeping/Ping
mkdir -p /var/lib/smokeping/DNS

# 设置权限
chown smokeping:smokeping /var/lib/smokeping/Ping
chown smokeping:smokeping /var/lib/smokeping/DNS
chmod 777 /var/lib/smokeping/images/Ping
chmod 777 /var/lib/smokeping/images/DNS

3. 配置 Caddy Web 服务器

创建 Caddy 配置文件 /etc/caddy/Caddyfile

{
    log {
        output file /var/log/caddy/access.log {
            roll_size 100MB  # 单个日志文件最大 100MB
            roll_keep 10     # 保留最近 10 个日志文件
            roll_keep_for 720h  # 保留 30 天(720 小时)
        }
        format console  # 易读的格式,也可改用 json 格式(format json)
    }
}

http://192.168.1.100 {
    # 处理静态资源
    handle_path /js/* {
        root * /usr/share/webapps/smokeping/
        file_server
    }
    handle_path /css/* {
        root * /usr/share/webapps/smokeping/
        file_server
    }
    handle_path /imgcache/* {
        root * /usr/share/webapps/smokeping/
        file_server
    }
    handle_path /images/* {
        root * /var/lib/smokeping/images
        file_server browse
    }

    # 处理 CGI 请求
    handle {
        root * /usr/share/webapps/smokeping/
        reverse_proxy unix//run/fcgiwrap/fcgiwrap.sock {
            transport fastcgi {
                env SCRIPT_FILENAME /usr/share/webapps/smokeping/smokeping.cgi
                split ""
            }
        }
    }
}

4. 配置 SmokePing

创建配置文件 /etc/smokeping/config

*** General ***

owner    = Demo User
contact  = admin@example.com
mailhost = mail.example.com
sendmail = /usr/sbin/sendmail
# NOTE: do not put the Image Cache below cgi-bin
# since all files under cgi-bin will be executed ... this is not
# good for images.
imgcache = /var/lib/smokeping/images
imgurl   = /images
datadir  = /var/lib/smokeping
piddir   = /run/smokeping
cgiurl   = http://192.168.1.100/smokeping.cgi
smokemail = /etc/smokeping/smokemail
tmail     = /etc/smokeping/tmail
# specify this to get syslog logging
syslogfacility = local0
# each probe is now run in its own process
# disable this to revert to the old behaviour
# concurrentprobes = no

5. 配置告警规则

*** Alerts ***
to = admin@example.com
from = smokeping@example.com

# 定义各种告警规则
+hostdown
type = loss
# in percent
pattern ==0%,==0%,==0%, ==U
comment = 对端无响应

+bigloss
type = loss
# in percent
pattern ==0%,==0%,==0%,==0%,>20%,>20%,>20%
comment = 连续3次采样-丢包率超过20%

+lossdetect
type = loss
# in percent
pattern ==0%,==0%,==0%,==0%,>0%,>0%,>0%
comment = 连续3次采样-存在丢包

+someloss
type = loss
# in percent
pattern >0%,*12*,>0%,*12*,>0%
comment = 间断性丢包

+rttdetect
type = rtt
# in milli seconds
pattern <100,<100,<100,<100,<100,<150,>150,>150,>150
comment = 连续3次采样延迟增大-超过150ms

6. 配置数据库设置

*** Database ***

step     = 300
pings    = 20

# consfn mrhb steps total

AVERAGE  0.5   1  28800
AVERAGE  0.5  12   9600
    MIN  0.5  12   9600
    MAX  0.5  12   9600
AVERAGE  0.5 144   2400
    MAX  0.5 144   2400
    MIN  0.5 144   2400

7. 配置显示模板

*** Presentation ***

template = /etc/smokeping/basepage.html
htmltitle = yes
graphborders = no
# If enabled, treat all filter menu queries as literal strings instead of regex
literalsearch = no

+ charts

menu = Charts
title = The most interesting destinations

++ stddev
sorter = StdDev(entries=>4)
title = Top Standard Deviation
menu = Std Deviation
format = Standard Deviation %f

++ max
sorter = Max(entries=>5)
title = Top Max Roundtrip Time
menu = by Max
format = Max Roundtrip Time %f seconds

++ loss
sorter = Loss(entries=>5)
title = Top Packet Loss
menu = Loss
format = Packets Lost %f

++ median
sorter = Median(entries=>5)
title = Top Median Roundtrip Time
menu = by Median
format = Median RTT %f seconds

8. 配置探针

*** Probes ***

+ FPing

binary = /usr/sbin/fping

+ DNS
binary = /usr/bin/dig
lookup = g.cn
pings = 5
step = 180

9. 配置主从模式(可选)

*** Slaves ***
secrets=/etc/smokeping/smokeping_secrets
+boomer
display_name=boomer
color=0000ff

+slave2
display_name=another
color=00ff00

10. 配置监控目标

*** Targets ***

alerts = someloss
probe = FPing

menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of <b>Example Company</b>. \
         Here you will learn all about the latency of our network.

+ Ping
menu = Ping
title = 10.0.0.14 Pings
alerts = hostdown,bigloss,lossdetect,someloss,rttdetect

++ server1
menu = 192.168.1.50
host = 192.168.1.50

++ server2
menu = 192.168.1.51
host = 192.168.1.51

+ DNS
menu = DNS
probe = DNS
alerts = hostdown,bigloss,lossdetect,someloss,rttdetect

++ dns-server
menu = 192.168.1.200
host = 192.168.1.200

启动服务

1. 启动并启用服务

# 启动 Caddy 服务
rc-service caddy start
rc-service caddy add

# 启动 SmokePing 服务
rc-service smokeping start
rc-service smokeping add

# 启动 fcgiwrap 服务
rc-service fcgiwrap start
rc-service fcgiwrap add

2. 检查服务状态

# 检查 Caddy 状态
rc-service caddy status

# 检查 SmokePing 状态
rc-service smokeping status

# 检查 fcgiwrap 状态
rc-service fcgiwrap status

验证部署

访问 http://192.168.1.100/smokeping.cgi 验证 SmokePing 是否正常工作。

Gitea 完整实践指南:从部署到自动化

一、Gitea 概述

1.1 什么是 Gitea

Gitea 是一个轻量级的自托管 Git 服务,采用 Go 语言编写,是 GitHub 和 GitLab 的轻量替代方案。它提供了完整的代码托管功能,包括 Issues、Pull Requests、Wiki、CI/CD 等,同时保持了极低的资源占用。

为什么选择 Gitea?

特性GiteaGitLabGitHub
资源占用极低(100MB RAM)高(2GB+ RAM)SaaS
部署复杂度简单复杂无需部署
数据控制完全自控完全自控依赖第三方
国内访问可部署内网可部署内网需代理

1.2 核心特性

  • 轻量级:单个二进制文件,内存占用极低
  • 易部署:支持二进制、Docker、包管理器多种方式
  • 完整功能:Issues、PR、Wiki、CI/CD、LFS、包管理
  • 插件系统:支持通过 Markdown 插件扩展功能
  • 兼容性强:支持 GitHub/GitLab 导入,API 兼容

1.3 适用场景

  1. 个人/小团队代码托管 - 轻量快速启动
  2. 企业内网 Git 服务 - 数据完全自控
  3. CI/CD 平台基础 - 结合 Actions 构建自动化流水线
  4. 镜像仓库中转站 - 在国内网络环境下加速访问

FRR OSPF Route-MAP 配置指南

概述

Route-Map 是 FRR (FRRouting) 中强大的路由策略工具,用于控制 OSPF 路由的发布和接收。通过 Route-Map,可以实现:

  • 路由过滤
  • 路由属性修改
  • 条件路由发布

基本概念

Route-Map 结构

Route-Map 由一条或多条 sequence 组成,每个 sequence 有:

  • 匹配条件 (match):定义哪些路由会被处理
  • 动作 (action)permit(允许)或 deny(拒绝)
  • 设置语句 (set):修改路由属性

顺序执行

Route-Map 按序列号从小到大依次执行:

  • 一旦匹配成功,执行对应动作并停止
  • 如果所有 sequence 都未匹配,默认拒绝

常用匹配条件

匹配类型说明示例
ip address匹配 IP 地址/前缀match ip address prefix-list LIST
interface匹配出接口match interface eth0
metric匹配路由开销match metric 100
protocol匹配路由协议类型match protocol ospf
next-hop匹配下一跳地址match ip next-hop A.B.C.D
tag匹配路由标签match tag 100
as-path匹配 AS 路径(BGP)match as-path 100

支持的协议类型

  • ospf - OSPF 路由
  • static - 静态路由
  • connected - 直连路由
  • kernel - 内核路由
  • rip - RIP 路由
  • bgp - BGP 路由
  • isis - IS-IS 路由
  • pim - PIM 路由

配置示例

1. 基本路由过滤

场景:只允许特定网段的路由进入 OSPF

router ospf
 # 定义前缀列表
 ip prefix-list INTERNAL_NETS seq 5 permit 10.0.0.0/8 le 24
 ip prefix-list INTERNAL_NETS seq 10 permit 172.16.0.0/12 le 24
 ip prefix-list INTERNAL_NETS seq 15 permit 192.168.0.0/16 le 24
 ip prefix-list INTERNAL_NETS seq 20 deny any

 # 应用到路由重分发
 redistribute connected route-map FILTER_CONNECTED

# 定义 route-map
route-map FILTER_CONNECTED permit 10
 match ip address prefix-list INTERNAL_NETS

场景:过滤掉特定路由

# 定义要过滤的网段
ip prefix-list BLOCK_NETS seq 5 deny 192.168.100.0/24
ip prefix-list BLOCK_NETS seq 10 permit any

# 应用到路由注入
router ospf
 default-information originate route-map FILTER_DEFAULT

route-map FILTER_DEFAULT permit 10
 match ip address prefix-list BLOCK_NETS

2. 修改路由属性

场景:修改路由开销值

route-map SET_METRIC permit 10
 set metric 100

route-map SET_METRIC permit 20
 match ip address prefix-list SPECIAL_NETS
 set metric 50

# 应用
router ospf
 redistribute static route-map SET_METRIC

场景:根据路由类型设置不同开销

route-map METRIC_BY_TYPE permit 10
 match ip address prefix-list CRITICAL_NETS
 set metric 10

route-map METRIC_BY_TYPE permit 20
 match ip address prefix-list NORMAL_NETS
 set metric 100

3. 条件路由发布

场景:只在有特定路由时发布默认路由

# 定义匹配条件
ip prefix-list ISP_ROUTE seq 5 permit 0.0.0.0/0

route-map CONDITIONAL_DEFAULT permit 10
 match ip address prefix-list ISP_ROUTE

router ospf
 default-information originate route-map CONDITIONAL_DEFAULT always

4. 重分发控制

场景:从 BGP 重分发到 OSPF 时过滤路由

# 只允许特定 BGP 路由进入 OSPF
ip prefix-list FROM_BGP seq 5 permit 203.0.113.0/24
ip prefix-list FROM_BGP seq 10 permit 198.51.100.0/24
ip prefix-list FROM_BGP seq 15 deny any

route-map BGP_TO_OSPF permit 10
 match ip address prefix-list FROM_BGP
 set metric 50
 set metric-type type-1

router ospf
 redistribute bgp route-map BGP_TO_OSPF

场景:不同协议间重分发

# 静态路由重分发
route-map STATIC_TO_OSPF permit 10
 match ip address prefix-list STATIC_NETS
 set metric 20

# 直连路由重分发
route-map CONNECTED_TO_OSPF permit 10
 match interface eth0 eth1
 set metric 10

router ospf
 redistribute connected route-map CONNECTED_TO_OSPF
 redistribute static route-map STATIC_TO_OSPF

5. 基于 OSPF 协议的匹配

场景:只处理 OSPF 协议的路由

# 匹配所有 OSPF 路由
route-map ONLY_OSPF permit 10
 match protocol ospf
 set metric 50

# 在重分发时应用
router ospf
 redistribute connected route-map ONLY_OSPF

场景:排除 OSPF 路由,处理其他协议

# 排除 OSPF 路由,只允许其他协议的路由
route-map EXCLUDE_OSPF permit 10
 match protocol static
 match protocol connected
 match protocol kernel
 set metric 20

route-map EXCLUDE_OSPF deny 20
 match protocol ospf

# 或者使用更简洁的方式
route-map FILTER_PROTOCOL permit 10
 match protocol static
 set metric 30
!
route-map FILTER_PROTOCOL permit 20
 match protocol connected
 set metric 10
!
# 默认拒绝其他协议(包括 ospf)

场景:根据 OSPF 路由类型处理

# 区分 OSPF 内部路由和外部路由
route-map OSPF_INTERNAL permit 10
 match protocol ospf
 match ip address prefix-list INTERNAL_PREFIX
 set metric 10

route-map OSPF_EXTERNAL permit 20
 match protocol ospf
 set metric 100

router ospf
 redistribute ospf route-map OSPF_EXTERNAL

6. 区域间路由控制

# 区域间路由过滤
router ospf
 area 1 filter-list prefix IN_AREA1 in
 area 1 filter-list prefix OUT_AREA1 out

ip prefix-list IN_AREA1 seq 5 deny 192.168.10.0/24
ip prefix-list IN_AREA1 seq 10 permit 10.0.0.0/8 le 24
ip prefix-list IN_AREA1 seq 15 permit 172.16.0.0/12 le 24
ip prefix-list IN_AREA1 seq 20 permit 192.168.0.0/16 le 24

常用命令

查看配置

# 显示 route-map 配置
show route-map

# 显示前缀列表
show ip prefix-list

# 显示 OSPF 路由表
show ip ospf route

# 显示 OSPF 数据库
show ip ospf database

# 显示 route-map 统计信息
show ip protocols ospf

调试命令

# 启用 OSPF 调试
debug ospf lsa
debug ospf zebra

# 查看路由重分发情况
show ip ospf redistribute

# 查看各协议路由
show ip route ospf
show ip route static
show ip route connected
show ip route bgp

# 查看 route-map 匹配统计
show ip route-map detail

最佳实践

1. 命名规范

# 使用描述性的名称
route-map FILTER_EXTERNAL_STATIC permit 10
route-map SET_METRIC_INTERNAL permit 10
route-map BGP_TO_OSPF permit 10

2. 序列号规划

# 使用 10 的倍数,方便插入新规则
route-map EXAMPLE permit 10
route-map EXAMPLE permit 20
route-map EXAMPLE permit 30

# 后续可以在 10 和 20 之间插入
route-map EXAMPLE permit 15

3. 默认拒绝策略

# 总是添加最后的拒绝规则
route-map EXAMPLE permit 10
 match ip address prefix-list ALLOW_NETS
!
route-map EXAMPLE deny 20
!
# 隐含的 deny any 在最后

4. 测试配置

# 临时设置为 permit 观察效果
route-map TEMP_DEBUG permit 100
 set metric 999

# 确认无误后调整
no route-map TEMP_DEBUG permit 100

Netbox 迁移到 k3s

本文记录了将 Netbox 从旧环境迁移到 k3s 集群的过程。

迁移步骤

1. 备份数据库

使用 pg_dump 导出 Netbox 数据库,排除变更日志表以减小备份体积:

pg_dump --username netbox --password --host localhost --exclude-table-data=extras_objectchange netbox > netbox.sql

2. 删除旧 Pod

为了避免 Pod 竞争和锁定问题,先删除现有的 Netbox Pod:

kubectl delete po netbox-68cbd8b854-2hvgp

3. 修改 PostgreSQL 认证方式

临时禁用密码认证

# 进入 PostgreSQL Pod
kubectl exec -it netbox-postgresql-0 -- sed -ibak 's/^\([^#]*\)md5/\1trust/g' /opt/bitnami/postgresql/conf/pg_hba.conf

# 重新加载配置
kubectl exec -it netbox-postgresql-0 -- pg_ctl reload

创建新数据库和用户

kubectl exec -it netbox-postgresql-0 -- psql -U postgres

DROP DATABASE netbox;
CREATE DATABASE netbox;
ALTER USER netbox WITH PASSWORD 'balabalabala';
ALTER DATABASE netbox OWNER TO netbox;

-- PostgreSQL 15 及以上版本需要
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;

恢复密码认证

kubectl exec -it netbox-postgresql-0 -- sed -i 's/^\([^#]*\)trust/\1md5/g' /opt/bitnami/postgresql/conf/pg_hba.conf
kubectl exec -it netbox-postgresql-0 -- pg_ctl reload

4. 恢复数据库

kubectl exec -it netbox-postgresql-0 -- sh -c "PGPASSWORD=balabalabala psql -U netbox -d netbox < /tmp/netbox.sql"

wget用Content-Disposition字段值为文件名

基本用法

wget可以通过--content-disposition参数使用HTTP响应头中的Content-Disposition字段来设置下载文件的文件名。

wget [--no-check-certificate] --content-disposition 'url'

详细说明

Content-Disposition头字段

Content-Disposition是HTTP响应头中的一个字段,用于指示如何处理响应内容。当服务器希望浏览器下载文件而不是显示时,会使用这个字段。

常见的格式:

Content-Disposition: attachment; filename="example.pdf"
Content-Disposition: attachment; filename*=UTF-8''%E4%BE%8B%E5%AD%90.pdf

参数说明

  • --content-disposition: 启用对Content-Disposition头的支持
  • --no-check-certificate: 跳过SSL证书验证(可选,用于自签名证书)

实际应用场景

1. 动态文件下载

当下载链接指向动态生成的文件时,服务器会通过Content-Disposition指定正确的文件名:

wget --content-disposition "https://example.com/download.php?id=123"

2. 中文文件名处理

对于包含中文字符的文件名,Content-Disposition可能会使用URL编码:

wget --content-disposition "https://example.com/中文文件.pdf"

wget会自动处理URL编码的文件名。

3. 批量下载

结合其他参数使用:

# 后台下载,使用Content-Disposition文件名
wget -b --content-disposition "https://example.com/file.zip"

# 限制下载速度,使用Content-Disposition文件名
wget --limit-rate=100k --content-disposition "https://example.com/large-file.iso"

在线文件共享网站

以下是几个常用的在线文件共享服务,可用于快速分享文件给他人:

📁 文件传输服务

https://easylink.cc/

  • 简洁快速的文件传输服务
  • 无需注册即可使用
  • 支持设置提取码和有效期

文叔叔

https://www.wenshushu.cn/

  • 国内知名的文件传输平台
  • 支持大文件传输(单文件最大支持 5GB)
  • 提供跨端管理功能

Hostize

https://www.hostize.com/

  • 提供临时文件存储服务
  • 支持快速分享链接
  • 界面简洁易用

去文件

https://quwenjian.cc/

  • 免费在线文件传输工具
  • 无需登录,上传即生成分享链接
  • 文件自动过期删除

💡 选择建议

  • 传输小文件:推荐使用 EasyLink 或去文件
  • 大文件传输:推荐使用文叔叔
  • 临时分享:推荐使用 Hostize

⚠️ 注意事项

  • 请勿传输敏感或机密信息
  • 注意文件大小限制和有效期设置
  • 定期清理过期文件链接

在线抠图工具推荐

以下是几款优秀的在线抠图工具,各有特色,可根据需求选择使用:

HTML Zone Background Remover

https://html.zone/background-remover/

  • 特点:免费且操作简单,支持多种图片格式
  • 优点
    • 无需注册,直接上传使用
    • 处理速度快,一般几秒内完成
    • 支持 JPG、PNG、WebP 等格式
    • 自动识别主体和背景,智能抠图
  • 适用场景:快速处理简单图片,适合用户日常使用

Pickwant

https://www.pickwant.com/removebg

  • 特点:AI 驱动的智能抠图,效果精准
  • 优点
    • 采用先进的 AI 算法,识别边缘准确
    • 支持复杂背景和头发丝细节
    • 提供多种抠图模式:自动、手动微调、批量处理
    • 可调整抠图质量,免费版限制图片大小
  • 适用场景:专业级抠图需求,如电商产品图、证件照处理

高定抠图

https://www.gaoding.com/koutu

  • 特点:国产工具,针对中文用户优化
  • 优点
    • 支持中文界面,操作简单直观
    • 提供手绘功能,可手动修复边缘
    • 支持透明背景输出,适合设计需求
    • 免费版有使用次数限制
  • 适用场景:国内用户首选,适合日常使用和简单设计工作

0v0 AI BG Remover

https://0v0.ai/rmbg/

  • 特点:完全免费的开源 AI 抠图工具
  • 优点
    • 基于 AI 模型,处理效果优秀
    • 无需注册,使用流程简单
    • 支持多种图片格式和复杂场景
    • 处理速度快,适合批量处理
  • 适用场景:需要抠图但预算有限的用户,学生和设计师

使用技巧

1. 图片准备

  • 选择主体清晰的图片,避免模糊或过度曝光
  • 尽量使用高质量的原始图片,抠图效果会更好
  • 如果有透明背景需求,建议使用 PNG 格式

2. 处理建议

  • 对于复杂背景(如毛发、树叶边缘),建议使用支持手动微调的工具
  • 批量处理相同类型图片时,可优先选择支持批量功能的工具
  • 重要图片建议保存多个版本,以便对比选择最佳效果

3. 质量控制

  • 检查抠图边缘是否平滑,有无瑕疵
  • 确认主体完整,无遗漏部分
  • 如需重新处理,确保图片分辨率足够

场景应用

电商产品图

  • 适合工具:Pickwant、高定抠图
  • 需求:精准抠图,突出产品细节
  • 建议:使用手动微调功能,确保边缘完美

社交媒体头像

  • 适合工具:0v0 AI、HTML Zone
  • 需求:快速处理,适合头像尺寸
  • 建议:选择自动模式,节省时间

设计素材准备

  • 适合工具:Pickwant、高定抠图
  • 需求:高质量透明背景素材
  • 建议:使用分层输出功能,便于后期编辑

证件照处理

  • 适合工具:高定抠图、Pickwant
  • 需求:人物完整,背景纯净
  • 建议:特别注意头发和边缘处理

注意事项

隐私保护

  • 上传图片前确认工具的隐私政策
  • 避免上传敏感或私人照片
  • 处理完成后及时下载,避免数据泄露

使用限制

  • 免费版通常有图片大小或次数限制
  • 某些工具可能要求注册或订阅才能使用高级功能
  • 注意查看工具的使用条款,了解商用授权

效果优化

  • 抠图效果取决于原始图片质量
  • 复杂场景可能需要手动调整
  • 建议保存源文件,便于后期修改

扩展功能

批量处理

部分工具支持批量上传多张图片同时处理,大大提高工作效率:

  • Pickwant(付费功能)
  • 0v0 AI(免费支持)
  • 高定抠图(免费版有限制)

格式支持

  • 输入格式:JPG、PNG、WebP、GIF 等
  • 输出格式:PNG(透明背景)、JPG(纯色背景)
  • 分辨率支持:大多数工具支持 up to 4000px

高级功能

  • 边缘细化:手动修复复杂边缘
  • 背景替换:自动替换背景为纯色或图片
  • 批量导出:不同格式和质量选项选择

推荐选择

初学者推荐

HTML Zone Background Remover - 界面简洁,操作简单,适合新手快速上手

免费用户推荐

0v0 AI BG Remover - 完全免费,效果优秀,性价比最高

专业用户推荐

Pickwant - AI 算法精准,功能全面,适合专业设计和商业用途

国内用户推荐

高定抠图 - 中文界面优化,本土化服务,响应速度快

总结

在线抠图工具已经达到了相当高的技术水平,AI 算法的应用让普通人也能轻松完成专业级的抠图工作。根据具体需求选择合适的工具,可以大大提高工作效率和图片质量。建议多尝试几款工具,找到最适合自己使用习惯的解决方案。

redirusr 和 redircmp — Active Directory 默认容器重定向

Active Directory(AD)新建用户和计算机时,默认存放在 CN=UsersCN=Computers 容器中。这两个是容器(Container)而非组织单元(OU),无法直接应用组策略(GPO)。在生产环境中,通常需要将默认位置指向自定义 OU,以便统一管理策略和权限。

Windows Server 提供了 redirusr.exeredircmp.exe 两个内置工具来完成这一操作。

使用官方 Registry v2 搭建 Docker Mirror 私有镜像仓库

在国内网络环境下,直接从 Docker Hub 拉取镜像经常遇到超时或被限流的问题。搭建一个本地 Docker Mirror 代理仓库可以有效解决这个痛点。本文介绍如何使用官方 Registry v2 搭建私有镜像代理仓库。

为什么要搭 Docker Mirror

1. Docker Hub 公网限速

Docker Hub 对匿名用户的拉取限速为 100 次/6 小时,免费账户为 200 次/6 小时。在 CI/CD 流水线或多人团队环境下,这个限额很容易触达。通过自建 Mirror 代理,所有节点的拉取请求汇聚到 Mirror 节点,Mirror 对上游只产生一次请求,有效规避限额。

2. 缓存加速 Build

在 CI/CD 构建中,每次 docker build 都需要拉取基础镜像。即使代码没有变化,基础镜像也会被反复从公网拉取,浪费时间。Mirror 缓存了基础镜像后:

  • 首次构建:从上游拉取并缓存
  • 后续构建:直接从 Mirror 拉取,速度提升 5-10 倍
  • 多节点并行构建:共享同一个 Mirror,只消耗一次外网流量

使用 resolvectl 临时指定 DNS 服务器

在日常运维中,我们经常需要临时切换 DNS 服务器来排查域名解析问题。传统做法是修改 /etc/resolv.conf,但在使用 systemd-resolved 的现代 Linux 发行版中,resolvectl 提供了更优雅的解决方案。