当使用Pipework与Docker容器时,为什么我得到RTNETLINK操作不允许?

Bry*_*yan 21 docker

我使用Vagrant/VirtualBox运行CoreOS stable 494.5.0并运行vanilla ruby​​:2.1.5 Docker镜像.我正在尝试使用Pipework将Docker容器连接到本地物理接口(而不是--net=host在运行容器时使用),这样我就可以嗅探流量.管道工程eth1@if2在容器中创建并正确设置其IP地址,但链接最终处于UNKNOWN状态,当我尝试使用ip link我获取链接时RTNETLINK answers: Operation not permitted.

如果它有所作为,我必须使用ip link set dev eth1 up而不是ip link set dev eth1@if2 up我得到Cannot find device "eth1@if2".

我有什么想法我做错了吗?

use*_*103 41

默认情况下,Docker容器没有完全权限.尝试将此添加到docker run命令:

--cap-add=NET_ADMIN
Run Code Online (Sandbox Code Playgroud)

能力列表

  • 注意:如果你正在使用`docker-compose`,请使用`cap_add`键为给定的容器,并使用`NET_ADMIN`作为值(必须是数组,即下一行的` - NET_ADMIN`) (6认同)

hoo*_*rEE 6

docker-compose.yml你可以添加这个:

container_or_service_name:
  cap_add:
    - NET_ADMIN
Run Code Online (Sandbox Code Playgroud)

信用应得的地方:此答案基于@petrkotek在已接受答案下的评论,但我最终自己使用了它,因此我想让它更加明显。