Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何限制从docker容器上载的速率?_Docker_Upload_Rate Limiting - Fatal编程技术网

如何限制从docker容器上载的速率?

如何限制从docker容器上载的速率?,docker,upload,rate-limiting,Docker,Upload,Rate Limiting,我需要防止长时间运行的Multitrabyte上传占用我网络的所有带宽,但我只能在进程级别上限制其带宽使用(这意味着降低整个机器的网络接口或降低该用户的网络流量将不起作用)。幸运的是,上传是用Docker容器化的。我能做些什么来降低docker容器的出站流量?多亏了我意识到您可以在容器内运行tc qdisc add dev eth0 root tbf rate 1mbit latency 50ms burst 10000,将其上传速度设置为1兆比特/秒 下面是一个Dockerfile示例,它通过

我需要防止长时间运行的Multitrabyte上传占用我网络的所有带宽,但我只能在进程级别上限制其带宽使用(这意味着降低整个机器的网络接口或降低该用户的网络流量将不起作用)。幸运的是,上传是用Docker容器化的。我能做些什么来降低docker容器的出站流量?

多亏了我意识到您可以在容器内运行
tc qdisc add dev eth0 root tbf rate 1mbit latency 50ms burst 10000
,将其上传速度设置为1兆比特/秒

下面是一个Dockerfile示例,它通过生成一个随机文件并以25KB/s的近似上载速度将其上载到来演示这一点:

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
选项
--cap add=NET_ADMIN
授予容器修改其网络接口的权限。您可以找到文档

Dockerfile首先安装它需要的依赖项
iproute
提供
tc
工具,而
curl
允许我们提出费率限制请求。安装依赖项后,我们生成一个2MB随机文件进行上传。下一节将构建一个脚本文件,用于配置速率限制并启动上载。最后,我们将该脚本指定为运行容器时要执行的操作

此容器向网络接口添加令牌桶过滤器,以将连接速度降低到25KB/s。可以找到提供给令牌Bucker过滤器的选项的文档

此Dockerfile可以修改为执行任何其他网络任务,方法是删除对cURL的调用并在其位置执行上载(当然,在安装上载所需的任何工具之后)

docker build ratelimit -t ratelimit && docker run --cap-add=NET_ADMIN ratelimit