飞牛OS给容器魔方上行宽带限速
笔记哥 /
06-03 /
21点赞 /
0评论 /
219阅读
# 🛠️ 完整持久化配置教程(带详细解释)
## 步骤1:确认容器魔方名称
```csharp
# 查看运行的容器列表
docker ps
# 从输出中找到容器魔方的名称(通常在NAMES列)
# 示例输出:
# CONTAINER ID IMAGE ... NAMES
# a1b2c3d4e5f6 wxedge-image ... wxedge
```
确认容器名称(如上例的 wxedge),后续步骤将用到这个名称。容器魔方的名字默认**wxedge**
## 步骤2:创建限速脚本
```csharp
# 创建脚本目录
sudo mkdir -p /opt/scripts
# 创建脚本文件
sudo nano /opt/scripts/limit_container_traffic.sh
```
在编辑器中粘贴以下内容(记得替换 YOUR\_CONTAINER\_NAME 为你的实际容器名称):容器魔方的名字为**wxedge**
eth0是网卡名称,可以在飞牛OS中的网络设置中查看自己的网卡名称,替换自己的使用网卡即可
```csharp
#!/bin/bash
# 容器名称(必须修改)
CONTAINER_NAME="wxedge"
# 等待容器完全启动(重要!)
echo "等待容器启动..."
while ! docker inspect --format='{{.State.Running}}' $CONTAINER_NAME | grep -q "true"; do
sleep 3
done
# 额外等待5秒确保网络初始化
sleep 5
# 获取容器PID
PID=$(docker inspect -f '{{.State.Pid}}' "$CONTAINER_NAME")
if [ -z "$PID" ]; then
echo "错误:无法获取容器 $CONTAINER_NAME 的PID"
exit 1
fi
# 2025-06-04 修改通过veth接口配置网络,避免docker限速影响飞牛系统的网络监控
# ========================= 核心修改开始 =========================
# 查找容器对应的veth接口(关键新增步骤)
VETH_INDEX=$(nsenter -t $PID -n cat /sys/class/net/eth0/iflink)
VETH_NAME=$(ip -o link | grep "if$VETH_INDEX" | awk -F': ' '{print $2}' | sed 's/@.*//')
if [ -z "$VETH_NAME" ]; then
echo "错误:无法找到容器对应的veth接口"
exit 1
fi
# 在宿主机侧对veth接口限速(替换容器内操作)
echo "为容器 $CONTAINER_NAME (veth:$VETH_NAME) 设置上行带宽限制..."
tc qdisc replace dev $VETH_NAME root tbf \
rate 20mbit \
burst 320kbit \
latency 400ms
# ========================= 核心修改结束 =========================
# 检查结果
if [ $? -eq 0 ]; then
echo "成功设置上行带宽限制:20Mbps"
else
echo "限速设置失败!"
exit 2
fi
```
按 Ctrl+O 保存文件,然后 Ctrl+X 退出编辑器。
给脚本添加可执行权限:
```csharp
sudo chmod +x /opt/scripts/limit_container_traffic.sh
```
## 步骤3:创建Systemd服务单元
```csharp
# 创建服务配置文件
sudo nano /etc/systemd/system/container-bandwidth.service
```
粘贴以下内容:
```csharp
[Unit]
Description=Container Bandwidth Limiter for Magic Container
After=docker.service
Requires=docker.service
[Service]
Type=simple
ExecStart=/opt/scripts/limit_container_traffic.sh
Restart=on-failure
RestartSec=30
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
```
保存并退出(Ctrl+O → Enter → Ctrl+X)
## 步骤4:启用并启动服务
```csharp
# 重载systemd配置
sudo systemctl daemon-reload
# 启用服务(开机自启)
sudo systemctl enable container-bandwidth.service
# 立即启动服务
sudo systemctl start container-bandwidth.service
```
## 步骤5:验证服务状态
```csharp
# 检查服务状态
sudo systemctl status container-bandwidth.service
# 预期看到 "active (running)" 状态
# 检查日志(查看限速是否成功)
journalctl -u container-bandwidth.service -n 50 --no-pager
```
日志中应看到类似:
```csharp
等待容器启动...
为容器 container_magic (PID:12345) 设置上行带宽限制...
成功设置上行带宽限制:20Mbps
```
### 步骤6:测试限速效果,理论上如果容器魔方正在上传,不需要测试,直接看效果,立竿见影。
>
>
> 飞牛OS系统中的UI界面有网速,看那个即可。比如之前是7Mb/s,限制完上传后变为了2.4Mb/s,速度根据自己需求调整
>
1. 在容器内安装测试工具:
```csharp
# 进入容器魔方Shell
docker exec -it YOUR_CONTAINER_NAME /bin/bash
# 在容器内安装speedtest-cli
apt-get update && apt-get install -y speedtest-cli # 对于Debian系
# 或(如果使用Alpine):
# apk add curl
```
1. 运行上行速度测试:
```csharp
# 方法1: 使用speedtest-cli
speedtest --simple
# 方法2: 使用curl测试上传
curl -T /dev/zero http://speedtest.ftp.otenet.gr/files/test10Mb.db
# 观察输出速度(应稳定在~2.5MB/s左右,因为20Mbps = 2.5MB/s)
```
## 步骤7:重启验证持久化
```csharp
# 重启飞牛OS
sudo reboot
# 重启后检查
sudo systemctl status container-bandwidth.service
docker exec YOUR_CONTAINER_NAME tc qdisc show dev eth0
```
应看到类似:
```csharp
qdisc tbf 800d: root refcnt 2 rate 20Mbit burst 32Kb lat 400.0ms
```
## 🚨 排错指南
| 问题现象 | 解决方案 |
| --- | --- |
| "无法获取容器PID" | 检查容器名称是否正确、容器是否正常运行 |
| "No such file or directory" | 确认已创建 /opt/scripts/limit\_container\_traffic.sh 并有执行权限 |
| "RTNETLINK answers: File exists" | 添加 replace 关键字:tc qdisc replace... |
| 网卡名称不是eth0 | 修改脚本中的 dev eth0 → 使用 docker exec 容器名 ip addr 查看正确网卡名 |
| 限速不精确 | 调整 burst 值:burst = rate/8 \* 1.5 |
| 服务启动过早 | 增加脚本中的 sleep 时间 |
## 🔄 更新限速配置
如需修改带宽限制(例如改为30Mbps):
编辑脚本文件:
```csharp
sudo nano /opt/scripts/limit_container_traffic.sh
```
修改 rate 20mbit → rate 30mbit
修改 burst 320kbit → burst 480kbit (30÷8×1.5=5.625,约480kbit)
重启服务:
```csharp
sudo systemctl restart container-bandwidth.service
```
>
>
> 💡 此方案通过Systemd在宿主机层面自动管理,避免修改容器内部,确保每次重启飞牛OS后自动生效且不影响容器魔方的正常功能。
>
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/3959
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利
- 相关联分享
- 飞牛OS给容器魔方上行宽带限速