permissions - 无法在 docker 容器中使用 tc

标签 permissions docker containers network-traffic netlink

我正在使用 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 身份运行。我猜该容器没有自己的内核,而是在与(可能)许多其他容器共享的内核上运行,因此不允许它接触底层内核的设置。有没有人有这个问题的经验?

最佳答案

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

关于permissions - 无法在 docker 容器中使用 tc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34629469/

相关文章:

android - 如何在运行时检查 android 安全权限?

java - 请求权限错误

javascript - 带有角色/带有meteor-roles包的组的组层次结构

linux - Neo4j:通过Dockerfile中的Shell脚本将文件夹复制到/data目录

docker - 加载 native 库时出错“/app/runtimes/linux/native/libgrpc_csharp_ext.x64.so - Grpc Core on Docker 容器

kubernetes - 无法使用 minikube 设置 Istio

linux - Ansible - 如何设置目录权限

docker - 谷歌应用引擎 : Load another Docker Image for Scrapy + Splash

docker - 多个 Docker 容器,相同的镜像,不同的配置

c++ - 亚洲 : best way to store a message to be broadcast