我正在为某些软件构建测试环境,该软件一旦部署,应该会看到一些网络接口。
我不需要界面是交互式的,只需要它们以ip link show
出现即可。
使用ip link add dummy0 type dummy
仅在直接在shell上执行时有效,而在脚本或使用RTNETLINK answers: Operation not permitted
的Dockerfile RUN中失败。
我正在使用docker-compose设置和链接多个容器,但是其中只有一个需要虚拟接口。
最简单的方法是什么?
答案 0 :(得分:3)
是因为缺少--cap-add=NET_ADMIN
。
请按照以下步骤操作:
Dockerfile
:FROM alpine
COPY script.sh /script.sh
RUN chmod +x /script.sh
ENTRYPOINT ["/script.sh"]
script.sh
:#!/bin/sh
ip link add dummy0 type dummy
tail -f /dev/null
exec "$@"
docker build -t myimage:v1 .
$ docker run -itd myimage:v1
$ docker logs container-id
ip: RTNETLINK answers: Operation not permitted
--cap-add=NET_ADMIN
选项运行docker容器。$ docker run -itd --cap-add=NET_ADMIN myimage:v1
$ docker exec -it container-id sh
/ # ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether c2:ad:ec:b9:7c:34 brd ff:ff:ff:ff:ff:ff
37: eth0@if38: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
/ #
注意:您可以看到dummy0接口已创建。
--cap-add
或--cap-drop
是可以与docker run一起使用的选项,用于添加或删除任何特定的linux capabilities。
有关更多信息,我强烈建议您浏览this。
默认情况下,码头工人启用和禁用的Linux功能很少,这些功能在here中列出。
如果使用docker-compose,请使用cap_add选项。