Rocky Linux 10 部署 Mihomo (Clash) 代理容器完整指南


Rocky Linux 10 部署 Mihomo (Clash) 代理容器完整步骤:

  • Compose 文件单独放在 /root/docker-compose-mihomo.yaml
  • Mihomo 配置和节点数据放在 /opt/mihomo/data
用途路径或地址
Compose 文件/root/docker-compose-mihomo.yaml
Mihomo 配置/opt/mihomo/data/config.yaml
节点文件目录/opt/mihomo/data/providers
Docker 共享网络proxy-net
业务容器使用的代理http://mihomo:7890

以下命令在你的 Rocky Linux 10 服务器上执行。已有的 Docker、镜像、网络和有效订阅配置可以直接复用。

先进入 root shell:

sudo -i
  1. 检查 Docker 和 Compose。

    docker version
    docker compose version
    

    docker version 应同时显示 Client 和 Server 信息。

    已经安装的跳过下面安装命令。 未安装时,可以采用 Docker RHEL 仓库的兼容安装方式;Docker 官方安装文档包含 RHEL 10。Docker 安装说明

    dnf install -y dnf-plugins-core
    
    dnf config-manager --add-repo \
      https://download.docker.com/linux/rhel/docker-ce.repo
    
    dnf install -y \
      docker-ce \
      docker-ce-cli \
      containerd.io \
      docker-buildx-plugin \
      docker-compose-plugin
    
    systemctl enable --now docker
    
    docker version
    docker compose version
    
  2. 下载 Mihomo 和测试镜像。

    docker pull metacubex/mihomo:latest
    docker pull curlimages/curl:latest
    

    使用项目发布的 metacubex/mihomo 镜像

    如果服务器无法下载镜像,可以离线导入。

    在另一台能够下载镜像、CPU 架构与服务器相同的机器上执行:

    docker pull metacubex/mihomo:latest
    docker pull curlimages/curl:latest
    
    docker save -o mihomo-bootstrap.tar \
      metacubex/mihomo:latest \
      curlimages/curl:latest
    

    将文件复制到 Rocky Linux 服务器,在文件所在目录执行:

    docker load -i mihomo-bootstrap.tar
    
  3. 创建数据目录和共享网络。

    mkdir -p /opt/mihomo/data/providers
    chmod 700 /opt/mihomo/data
    

    首次部署时创建网络:

    docker network create --driver bridge proxy-net
    

    如果提示网络已经存在,检查后复用:

    docker network inspect proxy-net
    

    需要使用代理的容器都加入这个自定义 bridge 网络,即可通过服务名 mihomo 访问代理。Docker bridge 网络说明

  4. 创建 Mihomo 配置。

    如果已有可用的 /opt/mihomo/data/config.yaml,保留现有节点和订阅配置,核对监听端口等设置即可。

    首次配置时编辑:

    vi /opt/mihomo/data/config.yaml
    

    填入以下完整内容,将 REPLACE_WITH_YOUR_SUBSCRIPTION_URL 替换为自己的订阅地址

    mixed-port: 7890
    allow-lan: true
    bind-address: "0.0.0.0"
    
    mode: rule
    log-level: info
    ipv6: false
    
    tun:
      enable: false
    
    dns:
      enable: false
    
    proxy-providers:
      subscription:
        type: http
        url: "REPLACE_WITH_YOUR_SUBSCRIPTION_URL"
        path: ./providers/subscription.yaml
        interval: 3600
        proxy: DIRECT
        health-check:
          enable: true
          url: https://www.gstatic.com/generate_204
          interval: 300
    
    proxy-groups:
      - name: PROXY
        type: url-test
        use:
          - subscription
        url: https://www.gstatic.com/generate_204
        interval: 300
        tolerance: 50
    
    rules:
      - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
      - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
      - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
      - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
      - MATCH,PROXY
    

    保存后执行:

    chmod 600 /opt/mihomo/data/config.yaml
    

    配置含义:

    设置作用
    mixed-port: 7890同一端口提供 HTTP 和 SOCKS5 代理
    allow-lan: true接受其他容器连接
    bind-address: "0.0.0.0"监听容器内所有 IPv4 接口
    tun.enable: false使用显式代理
    interval: 3600每小时更新订阅
    type: url-test自动测速选择节点
    最后一条 MATCH,PROXY其余交给 Mihomo 的请求使用代理节点

    订阅地址应返回节点数据,推荐使用包含顶层 proxies: 的 Clash/Mihomo YAML 格式。订阅配置说明

    如果订阅地址首次无法直连下载: 在能够访问订阅的机器上下载节点 YAML,复制到:

    /opt/mihomo/data/providers/subscription.yaml
    

    然后把上面整个 proxy-providers 部分替换为:

    proxy-providers:
      subscription:
        type: file
        path: ./providers/subscription.yaml
        health-check:
          enable: true
          url: https://www.gstatic.com/generate_204
          interval: 300
    

    本地文件方式需要自行更新节点文件,其余配置保持一致。

  5. 创建 /root/docker-compose-mihomo.yaml

    执行下面命令生成文件:

    cat > /root/docker-compose-mihomo.yaml <<'YAML'
    name: mihomo-proxy
    
    services:
      mihomo:
        image: metacubex/mihomo:latest
        container_name: mihomo
        restart: unless-stopped
    
        command:
          - "-d"
          - "/root/.config/mihomo"
    
        volumes:
          - /opt/mihomo/data:/root/.config/mihomo:z
    
        networks:
          - proxy-net
    
        logging:
          driver: json-file
          options:
            max-size: "10m"
            max-file: "3"
    
    networks:
      proxy-net:
        external: true
    YAML
    
    chmod 600 /root/docker-compose-mihomo.yaml
    

    这里的挂载源使用绝对路径 /opt/mihomo/data,因此 Compose 文件放在 /root 下,也能正确读取配置。

    :z 用于 SELinux 标签,允许校验容器和运行容器共享访问这个项目目录。Docker SELinux 挂载说明

    如果已经按上一版部署,项目名仍为 mihomo-proxy,后续统一使用这个新文件管理原项目即可。

  6. 校验、启动并测试代理。

    先检查 Compose:

    docker compose -f /root/docker-compose-mihomo.yaml config -q
    

    没有输出且正常退出,表示 Compose 配置检查通过。

    再检查 Mihomo 配置:

    docker compose -f /root/docker-compose-mihomo.yaml \
      run --rm --no-deps --pull never mihomo \
      -t -d /root/.config/mihomo
    

    检查通过后启动:

    docker compose -f /root/docker-compose-mihomo.yaml \
      up -d --pull never mihomo
    

    这里使用 --pull never,直接运行第 2 步准备好的本地镜像,避免启动时再次尝试访问镜像仓库。Compose 启动参数

    查看状态和日志:

    docker compose -f /root/docker-compose-mihomo.yaml ps
    
    docker compose -f /root/docker-compose-mihomo.yaml \
      logs --tail=100 mihomo
    

    然后从另一个容器实际测试:

    docker run --rm --pull=never \
      --network proxy-net \
      curlimages/curl:latest \
      --noproxy "" \
      --proxy http://mihomo:7890 \
      --max-time 30 \
      --fail --silent --show-error \
      --output /dev/null \
      --write-out 'HTTP %{http_code}\n' \
      https://www.gstatic.com/generate_204
    

    正常预期:

    HTTP 204
    

    再查看日志,确认对应请求经过了 PROXY 及其中某个节点:

    docker compose -f /root/docker-compose-mihomo.yaml \
      logs --tail=50 mihomo
    

    容器显示运行中只代表进程启动,实际请求测试成功才能确认代理可用。

  7. 配置其他业务容器使用代理。

    修改的是业务容器自己的 Compose 文件;Mihomo 继续由 /root/docker-compose-mihomo.yaml 单独管理。

    假设业务服务名为 app,在原业务配置中合并以下内容,保留原有镜像、数据卷、端口和其他配置:

    services:
      app:
        # 保留已有 image、volumes、ports 等配置
    
        environment:
          HTTP_PROXY: "http://mihomo:7890"
          HTTPS_PROXY: "http://mihomo:7890"
          http_proxy: "http://mihomo:7890"
          https_proxy: "http://mihomo:7890"
    
          NO_PROXY: "localhost,127.0.0.1,::1,db,redis"
          no_proxy: "localhost,127.0.0.1,::1,db,redis"
    
        networks:
          - default
          - proxy-net
    
    networks:
      default: {}
    
      proxy-net:
        external: true
    

    其中:

    • default 代表业务原先的默认网络。如果使用其他命名网络,保留原网络并追加 proxy-net
    • dbredis 是内部服务名示例,把需要直连的实际服务名加入 NO_PROXY
    • HTTPS_PROXY 也写 http://mihomo:7890,表示通过 HTTP 代理建立 HTTPS 隧道。

    在业务项目目录执行,app 替换为实际服务名:

    docker compose up -d --no-deps --force-recreate app
    

    环境变量需要通过重新创建容器来更新;单纯重启不会加入新的变量。容器内程序也需要支持这些代理变量,否则应在程序自身设置里指定代理。Docker 容器代理说明

    其他需要代理的服务,重复追加网络和环境变量即可。

    如果已有容器是通过 docker run 创建的,可先接入网络:

    docker network connect proxy-net 你的容器名
    

    这一步只建立连接。之后还需在应用中填写代理地址,或保留原数据卷和启动参数重新创建容器,加入代理环境变量。

  8. 日常维护和排查。

    查看实时日志:

    docker compose -f /root/docker-compose-mihomo.yaml \
      logs -f --tail=100 mihomo
    

    修改 /opt/mihomo/data/config.yaml 后先校验:

    docker compose -f /root/docker-compose-mihomo.yaml \
      run --rm --no-deps --pull never mihomo \
      -t -d /root/.config/mihomo
    

    校验通过后重启:

    docker compose -f /root/docker-compose-mihomo.yaml \
      restart mihomo
    

    如果修改的是 Compose 文件,使用以下命令应用:

    docker compose -f /root/docker-compose-mihomo.yaml \
      up -d --pull never mihomo
    

    更新镜像:

    docker compose -f /root/docker-compose-mihomo.yaml \
      pull mihomo
    

    拉取成功后执行:

    docker compose -f /root/docker-compose-mihomo.yaml \
      up -d --pull never mihomo
    

    服务器无法下载镜像时,仍可使用第 2 步的离线导入方式。长期运行可以把 latest 换成验证过的固定版本或 digest。

    问题优先检查
    找不到配置文件挂载源是否为绝对路径 /opt/mihomo/data
    Could not resolve proxy: mihomo业务容器是否加入 proxy-net
    连接 mihomo:7890 被拒绝Mihomo 状态、监听地址和端口
    没有节点、订阅下载超时订阅地址、返回格式,或改用本地节点文件
    读取配置出现 permission denied文件权限、挂载后的 :z
    测试成功但业务不走代理应用是否支持代理变量、容器是否已重新创建
    数据库等内部服务访问异常原业务网络是否保留、服务名是否加入 NO_PROXY
  9. 可选:让 Docker 拉取镜像也使用代理。

    仅需业务容器内部使用代理时,第 8 步后就已完成。

    如果还需要 docker pulldocker compose pull 使用代理,再执行本步。Docker daemon 有独立的代理设置,不会因此给 Rocky Linux 的其他程序配置代理。Docker daemon 代理说明

    编辑指定的 Compose 文件:

    vi /root/docker-compose-mihomo.yaml
    

    services.mihomo 下增加与 volumes 同级的配置:

        ports:
          - "127.0.0.1:7890:7890"
    

    应用端口映射:

    docker compose -f /root/docker-compose-mihomo.yaml \
      up -d --pull never mihomo
    

    编辑 Docker daemon 配置:

    mkdir -p /etc/docker
    vi /etc/docker/daemon.json
    

    新文件可以填写下面完整内容;已有文件则把 proxies 合并到原 JSON 顶层,保留原有设置:

    {
      "proxies": {
        "http-proxy": "http://127.0.0.1:7890",
        "https-proxy": "http://127.0.0.1:7890",
        "no-proxy": "localhost,127.0.0.1,::1"
      }
    }
    

    私有镜像仓库如果需要直连,把其域名加入 no-proxy

    校验配置:

    dockerd --validate --config-file=/etc/docker/daemon.json
    

    检查通过后,在可以接受容器短暂中断的时间重启 Docker:

    systemctl restart docker
    

    确认 Mihomo 已恢复运行,然后测试拉取:

    docker compose -f /root/docker-compose-mihomo.yaml ps
    
    docker pull alpine:latest
    

    此时,业务容器继续使用 http://mihomo:7890,Docker daemon 使用 http://127.0.0.1:7890

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:Clash Verge开启后,会影响内网路由器的DNS解析
下一篇:没有了
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

Rocky Linux 10 部署 Mihomo (Clash) 代理容器完整指南
Rocky Linux10 安装Docker环境
Rocky Linux 磁盘扩容
《步步入门》 .NET 6 部署Linux
使用 mitmproxy + python 做拦截代理
Rocky Linux 虚拟机磁盘扩容后 lsblk 没变化的排查与处理
PVE 修改 Host IP 地址的完整操作指南
JAVA环境部署
Nginx部署
Rocky Nginx添加端口
suse docker容器安装
Linux Open VPN客户端部署
Clash Verge开启后,会影响内网路由器的DNS解析
Rocky Linux设置静态IP地址
C# .net项目Docker方式部署
Linux查看系统信息
Python使用selenium+chrome配置指南
C#代码编码规范手册 软件开发规范 开发指南
monaco-editor使用指南
博客文章博文排版指南

热门标签
.NET Core .NET Reactor ag-grid AI发布 api安全 ASP.NET Core C#DLL加密 C#播放声音 C#代码混淆 C#代码加密 ChromeDriver Codex DateTime DBeaver devexpress devTool DLL混淆 edge.js EF EFCore Electron element-ui el-form el-table excel FastReport FileStream FolderBrowerDialog FolderSelectDialog form提交 git gridcontrol gridview input javascript json字符串 JS转换对象JSON jwt JWT授权 linq log Math MCP mitmproxy MVC MySQL Navicat netstat nginx node_modules NSwag Nuget Nuget镜像 number PowerShell pyinstaller python pythoncom python爬虫 python抓包 pywin32 redis Requests-html RestSharp Selenium sql SQL Server Swagger to-cms Visual Studio VSCode vue VueRouter vue路由 VUE页面通讯 Webpack Windows Windows服务 winform wmi xlrd yaml YESCMS YESWEB开发框架 白象 表单提交 播放声音 打开URL 代码混淆 弹窗提醒 端口占用 对象转换 分布式 公共字典 机器码 进程排查 静态资源 开发指南 路由参数 密钥 配置教程 配置文件 权限 人工智能 任务 任务调度 日期间隔 日志 日志记录 省市区 授权验证 数据库 四舍五入 文案 文件读取 文件夹选择 文件目录选择 问题排查 行政区域数据 页面通讯 中间件 CSharp 事务锁 工单系统 并发控制 重复提交 CMS Markdig Markdown markdown-it marked 技术选型 VS Code 开发工具 源代码管理 版本控制 Docker PostgreSQL 时区 部署排查 CMS架构 EF Core 主题系统 二次开发 插件系统 容器 运维命令 镜像清理 Linux NAS 远程挂载 飞牛 fnOS S/4HANA SAP GUI SAP HANA SAP R/3 SAP入门 SAP版本 ERP SAP SAP MM 库存管理 物料管理 采购管理 入门教程 SAP S/4HANA SPRO 企业结构 采购组织 MM01 物料主数据 物料类型 BP分组 业务伙伴 供应商主数据 ME41 RFQ 库存物料 采购流程 ME51 消耗性物料 科目分配 采购申请 AC03 ML81N 外部服务 服务主数据 Business Partner SAP培训 ME51N MM模块 Lean Services MM-SRV 外部服务采购 PIR 供应来源 采购主数据 采购信息记录 ME31K 框架协议 计划协议 采购合同 ME01 供应来源确定 货源清单 MEQ1 供应源确定 配额安排 配额评分 MD04 MD21 MRP 计划文件 需求计划 批量程序 MD01N MD02 MRP Live MD05 MM 物料计划 优化采购 供应源 采购订单 ME2A 供应商确认 采购监控 Flexible Workflow 凭证释放 采购审批 释放策略 实地盘点 物料凭证 货物移动 MIGO 收货 移动类型 已撤回 供应商退货 货物发出 STO 库存转储 转移过账 生产订单 预留 GR/IR MIRO 供应商发票 物流发票校验 OMR2 税码 FI PP SD 实操教程 MRBR OMR6 发票差异 交货成本 后续借记 MI01 实物盘点 盘点差异 公司代码 工厂 组织结构 OMS2 主数据定制 自动科目确定 BP角色 CVI 伙伴确定 编号范围 凭证类型 字段选择 FBN1 OMBT OMC2 会计凭证 OMJJ BOM 委外加工 项目类别L MRKO 供应商寄售 特殊库存K MRKON PIPE Pipeline 特殊库存P ERS MRIS 发票计划 周期性结算 里程碑付款 变更追踪 版本管理 采购凭证 SFTP WebDAV 网盘 飞牛fnOS AMPL HERS MPN 中文教程 库存确定 可用性检查 缺件检查 Output Management 消息确定 输出确定 分割评估 库存计价 评估类别 评估类型 PB00 RM0000 条件技术 采购定价 MM-FI集成 OBYC 库存估价 文本类型 文本采用 EFB EVO MSV SU3 用户参数 发票校验 合同参照 履约保留款 特别总账 预付款 Fiori Launchpad SAP Fiori 应用导航 用户体验 LSMW LTMC Migration Cockpit 数据迁移 BRFplus OPD Output Control My Inbox 审批流程 灵活工作流 SAP PP 外部加工 SAP QM 检验批 质量信息记录 采购收货 SAP PM 维护BOM 维护订单 SAP SD SAP Service 端到端流程 MM模块培训 FI-MM集成 供应商管理 审批配置 FICO入门 SAP FICO 财务配置 供应商税务 预扣税 House Bank 银行对账 客户清账 应收账款 FI控制 验证与替代 印度 GST 税务配置 F110 FBZP EWM入门 SAP EWM 仓库管理 OX14 成本核算 物料评估 后勤配置 物料组 价值更新 数量更新 PP-PI 流程制造 生产计划 容差配置 SAP事务码 SAP基础 TCODE Basis 事务代码 MMNR 编号区间 采购实操 组织架构 OMSF SAP实操 FI配置 端口修改 密码设置 数据库配置 远程访问 ABAP基础 SAP ABAP 内表 变量定义 常量 数据类型 ABAP SAP开发 变量 基础语法 系统变量 结构体 字符串处理 循环语句 控制语句 DDIC SE11 数据字典 透明表 ABAP开发 ALE EDI IDoc 增强技术 ABAP内表 HASHED TABLE SORTED TABLE STANDARD TABLE 基本概念 性能优化 PARAMETERS SELECT-OPTIONS SELECTION-SCREEN 报表程序 选择屏幕 F4帮助 Report事件 输入校验 ABAP SQL ABAP语法 Open SQL SELECT 数据库访问 IKuai IP修改 PVE 网络配置 虚拟化 AI 编程助手 ClaudeCode OpenRouter 增强 BADI SE09 STMS 传输请求 开发机 请求导入 Android APK JOC.Update SHA-256 UniApp WinForms WPF 在线升级 版本发布 数据查询 特性配置 ZPROGRAM_DOWNLOAD 代码下载 Clash Linux运维 Mihomo Rocky Linux 代理服务 容器网络 运维教程
联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码