&引用;RTNETLINK回答:不允许操作“;在docker构建期间`
我想使用&引用;RTNETLINK回答:不允许操作“;在docker构建期间`,docker,network-programming,Docker,Network Programming,我想使用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 \ softwa
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 .
但在运行命令时失败,出现以下错误:
Step 3/3 : RUN tc qdisc add dev lo root handle 1: htb
---> Running in 59b27236040b
RTNETLINK answers: Operation not permitted
我找到了,但我的问题发生在
docker构建期间,而不是docker运行期间。我无法指定--cap add
,因为这不是docker build
的选项。正如其中一条评论所说,在构建阶段运行tc
命令没有意义
我使用的解决方法是:
为容器中的tc
添加权限(如果最终容器用户不是root),但不要实际运行Dockerfile中的任何tc
命令
按正常方式构建容器
运行容器,添加--cap add=NET\u ADMIN
从运行的容器内部,执行tc
命令
这个操作真的没有意义。Docker没有完全虚拟化的网络,容器通常无法在这种细节级别控制其网络环境;另外,映像只是一个文件系统加上一些描述如何启动容器的元数据,像这样的运行时设置不会持久保存在映像中。我会坚持使用虚拟机。我还是Docker的新手,所以我误解了它的功能是有道理的。但是netem在运行时位于容器中,我想将此配置应用于从映像派生的所有容器,因此对我来说,指定这些设置的逻辑位置是Dockerfile。听起来我需要在运行时做些什么,谢谢你的评论。