如何解决在docker build期间“ RTNETLINK答案:不允许操作”
我想使用tc
和netem
在某些本地主机端口上构建具有延迟和损耗的Docker映像。tc
命令适用于常规vm,但不适用于Dockerfile。
这是我的Dockerfile:
FROM ubuntu:16.04
RUN DEBIAN_FRONTEND="noninteractive" \
apt-get update --fix-missing && \
apt-get -y install \
apt-utils \
software-properties-common \
iproute2
RUN tc qdisc add dev lo root handle 1: htb
我尝试使用以下命令进行构建:
docker build .
但是它在RUN命令上失败,并显示以下错误:
Step 3/3 : RUN tc qdisc add dev lo root handle 1: htb
---> Running in 59b27236040b
RTNETLINK answers: Operation not permitted
我找到了this,但是我的问题发生在docker build
而非docker run
期间。我无法指定--cap-add
,因为这不是docker build
的选择。
解决方法
正如其中一条评论所述,在构建阶段运行tc
命令是没有意义的。
我使用的解决方法是:
- 在容器中为
tc
添加权限(如果最终容器用户不是root用户),但实际上不运行Dockerfile中的任何tc
命令。 - 正常构建容器。
- 运行容器,添加
--cap-add=NET_ADMIN
- 从正在运行的容器内部,执行
tc
命令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。