logo NodeSeekbeta

求佬,限速docker容器内程序怎么搞呢

如题,有没有技术佬,分享下,
我相对某个运行程序进行上传和下载的速度进行限制,目前听说是可以通过docker给他进行限速,但是方法不会
进阶问题,如果我还想在限速的基础上,再封禁UDP呢?

  • @wxinkok #0 这种比较具体的问题可以问问gpt

  • 对于在 Docker 容器中限制程序的上传和下载速度,同时还要封禁 UDP 流量,你可以使用以下方法:

    1. 使用 Docker 的 --cap-add=NET_ADMIN 参数启动容器,给予容器修改网络配置的权限。

    2. 在容器内安装 tc 工具,用于限制网络带宽。

    3. 使用 iptables 命令封禁 UDP 流量。

    下面是详细步骤:

    1. 启动容器时添加 --cap-add=NET_ADMIN 参数:
    docker run --cap-add=NET_ADMIN ...
    
    1. 进入容器,安装 tc 工具(以 Ubuntu 为例):
    apt-get update
    apt-get install -y iproute2
    
    1. 使用 tc 命令限制上传和下载速度(例如限制上传速度为 1Mbps,下载速度为 2Mbps):
    tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
    tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 2mbit burst 32kbit latency 400ms
    
    1. 使用 iptables 命令封禁 UDP 流量:
    iptables -A OUTPUT -p udp -j DROP
    iptables -A INPUT -p udp -j DROP
    

    这将阻止所有进出容器的 UDP 流量。

    1. 如果需要允许特定端口的 UDP 流量,可以在 iptables 规则中添加例外,例如允许 53 端口(DNS)的 UDP 流量:
    iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
    iptables -A INPUT -p udp --sport 53 -j ACCEPT
    

    通过以上步骤,你就可以在 Docker 容器中限制程序的上传和下载速度,同时封禁 UDP 流量(除了特定允许的端口)。

    请注意,以上命令需要根据实际情况进行调整,如网卡名称、速度限制值等。另外,为了持久化 iptables 规则,你可能需要安装额外的工具或写入启动脚本,以确保容器重启后规则仍然生效。

  • 在 Nginx 容器中使用 tc 命令限速对应服务需要进行一些特殊的设置。下面是一个详细的步骤guide:

    1. 首先,确保 Nginx 容器以特权模式运行,并且可以访问宿主机的网络命名空间。可以在启动 Nginx 容器时使用 --privileged--network host 参数:
    docker run -d --privileged --network host --name nginx-proxy nginx
    
    1. 进入 Nginx 容器:
    docker exec -it nginx-proxy /bin/bash
    
    1. 在容器内安装 iproute2 包(如果尚未安装):
    apt-get update && apt-get install -y iproute2
    
    1. 找到要限速的 Web 服务容器的网络接口。可以使用 docker inspect 命令查看容器的网络设置:
    docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web_container_name
    

    web_container_name 替换为实际的 Web 服务容器名称。记下输出的 IP 地址。

    1. 在 Nginx 容器内,使用 tc 命令对相应的网络接口进行限速。假设 Web 服务容器的 IP 地址为 172.17.0.2,可以使用以下命令对其进行限速:
    tc qdisc add dev eth0 root handle 1: htb default 10
    tc class add dev eth0 parent 1: classid 1:10 htb rate 1mbit
    tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 172.17.0.2 flowid 1:10
    

    这些命令将对发往 172.17.0.2 的流量进行限速,限制速率为 1Mbps。

    1. 重复步骤 4 和 5,为每个需要限速的 Web 服务容器设置相应的 tc 规则。

    2. 最后,确保在 Nginx 配置文件中正确设置了代理规则,将请求转发到相应的 Web 服务容器。

    请注意,由于 tc 命令直接在 Nginx 容器内运行,因此限速规则只会影响 Nginx 容器与 Web 服务容器之间的流量,而不会影响 Web 服务容器与其他容器或外部网络之间的流量。

    另外,在容器重启后,tc 规则可能会丢失。为了持久化这些规则,你可以考虑在容器启动时自动应用这些规则,或者使用 Docker 的 --cap-add=NET_ADMIN 参数而不是 --privileged,并在宿主机上设置 tc 规则,以限制进出相应容器的流量。

  • iptables 给 DOCKER-USER 链加规则?理论应该可以,实践没试过

  • https://github.com/lukaszlach/docker-tc

  • @raiden23 #5
    谢谢,鸡腿送上

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有15306位seeker

🎉欢迎新用户🎉