是否可以使用 Docker build 创建虚拟以太网接口,下面是来自 DockerFile 构建日志的片段。
Step 14/17 : run sudo ip link add dummy0 type dummy && sudo ip addr add 192.168.10.12/24 dev dummy0 && sudo ip link set dummy0 up
---> Running in 21c388505e28
RTNETLINK answers: Operation not permitted
我能够通过在特权模式下运行映像来创建虚拟接口。以下命令用于创建虚拟接口。
$ ip link add eth_dummy type dummy
$ ip addr add 172.16.1.1/24 dev eth_dummy
$ ip link set eth_dummy up
这些命令需要特权模式,而 docker build 不允许,我怎样才能在每次从映像启动容器时执行这些命令。
答案1
您需要使用以下选项运行docker容器:--cap-add=NET_ADMIN
。(参考)
答案2
该docker build
命令无法运行特权命令或更改构建期间使用的嵌入式容器的功能。映像构建过程旨在实现可移植性,可在不同的主机上运行,可能在服务器不信任正在构建的映像的云中运行。
在镜像构建期间执行此操作也没有意义。构建命令的输出是文件系统更改,存储为覆盖(通常)文件系统的层。当您尝试在另一个节点上运行同一镜像时,对网络的更改将丢失。如果这些更改与容器网络隔离,那么它们将在 RUN 步骤结束时丢失,在执行 Dockerfile 的下一步之前。
相反,考虑将逻辑移到容器启动时运行的入口点。