飞牛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后自动生效且不影响容器魔方的正常功能。 >