【问题标题】:Can't use tc in docker container不能在 docker 容器中使用 tc
【发布时间】:2016-01-06 09:21:23
【问题描述】:

我正在使用 tc 来限制 docker 容器中的发送速率。 将以下脚本添加到 Dockerfile 中:

tc qdisc add dev eth0 root handle 1: htb default 2
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 2mbit ceil 2mbit prio 2
tc qdisc add dev eth0 parent 1:2 handle 2: sfq perturb 10
tc filter add dev eth0 protocol ip parent 1:0 u32 match ip dst 192.168.1.124 flowid 1:2

通过此命令在 root 帐户下运行 docker:

docker run --cap-add=NET_ADMIN --name lqt_build -d -p 8443:8443 -p 443:443 -p 3478:3478 lqt_build 

但它仍然显示此错误:

Step 25 : RUN cd /usr/share/ta/ && sudo ./tt rate
---> Running in fb6a4477ad6c
RTNETLINK answers: Operation not permitted
RTNETLINK answers: Operation not permitted
RTNETLINK answers: Operation not permitted
RTNETLINK answers: Operation not permitted
We have an error talking to the kernel
[8] System error: read parent: connection reset by peer

似乎内核会阻止容器中的应用更改某些内核设置,即使它们以 root 身份运行也是如此。我猜容器没有自己的内核,但运行在与(可能)许多其他容器共享的内核上,因此不能允许它接触底层内核的设置。有没有人遇到过这个问题?

【问题讨论】:

标签: permissions docker containers network-traffic netlink


【解决方案1】:

根本原因是在 Dokcerfile 中使用了 tc。 NET_ADMIN 能力当时不生效。 docker 容器运行后,Tc 命令可以正常工作。感谢 user2915097。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2021-02-25
    • 1970-01-01
    • 2019-02-13
    • 2020-09-06
    • 2014-12-26
    相关资源
    最近更新 更多