Chr*_*don 10 upload rate-limiting docker
我需要阻止长时间运行的多TB上传占用我所有的网络带宽,但我只能限制其在进程级别上的带宽使用(这意味着减慢整个机器的网络接口或减慢此用户的网络流量不会工作).幸运的是,上传是用Docker容器化的.我该怎么做才能减慢docker容器的出站流量?
Chr*_*don 13
感谢这个问题,我意识到你可以tc qdisc add dev eth0 root tbf rate 1mbit latency 50ms burst 10000
在容器内运行,将其上传速度设置为1兆比特/秒.
这是一个示例Dockerfile,通过生成随机文件并以大约25KB/s的上传速度将其上传到/ dev/null-as-a-service来演示这一点:
FROM ubuntu
# install dependencies
RUN apt-get update
RUN apt-get install -y iproute curl
# create a large random file to upload
RUN head -c 2M </dev/urandom > /upload.data
# rate-limit the network interface and
# upload the data when docker image is run
RUN echo "#!/bin/bash" >> /upload.sh
RUN echo "tc qdisc add dev eth0 root tbf rate 25kbps latency 50ms burst 2500" >> /upload.sh
RUN echo "curl -d @/upload.data http://devnull-as-a-service.com/dev/null" >> /upload.sh
RUN chmod a+x /upload.sh
ENTRYPOINT exec /upload.sh
Run Code Online (Sandbox Code Playgroud)
假设您在名为ratelimit
当前工作目录的目录中有此Dockerfile ,则可以使用以下命令运行它:
docker build ratelimit -t ratelimit && docker run --cap-add=NET_ADMIN ratelimit
Run Code Online (Sandbox Code Playgroud)
该选项--cap-add=NET_ADMIN
为容器提供修改其网络接口的权限.你可以在这里找到文档.
Dockerfile首先安装它需要的依赖项.iproute
提供tc
工具,并curl
允许我们提出我们的速率限制请求.安装我们的依赖项后,我们生成一个2MB的随机文件进行上传.下一节将构建一个脚本文件,用于配置速率限制并开始上载.最后,我们将脚本指定为运行容器时要执行的操作.
此容器将令牌桶过滤器添加到网络接口,以将连接速度降低到25KB/s.可以在此处找到提供给Token Bucker过滤器的选项的文档.
可以修改此Dockerfile以执行任何其他网络任务,方法是删除对cURL的调用并在其位置执行上载(当然,在安装上载所需的任何工具之后).
归档时间: |
|
查看次数: |
3398 次 |
最近记录: |