【问题标题】:nmcli in a docker containerdocker 容器中的 nmcli
【发布时间】:2019-03-10 07:58:34
【问题描述】:

我目前正在寻找在 docker 容器中运行 nmcli

nmcli 在我的主机上工作得很好,但如果我启动一个特权容器,nmcli 不起作用。

启动我的容器

sudo docker run --privileged --net host -it image_with_network-manager /bin/bash

然后运行 ​​nmcli

nmcli dev wifi  => Error: Could not create NMClient object: Could not connect: No such file or directory

我容器内的ifconfig没问题,我有主机的eth0和wlan0

【问题讨论】:

  • 您能否与strace 确认无法打开的文件是什么,并告诉我们? (strace nmcli dev wifi)
  • 谢谢你帮助我,这里是 strace:pastebin.com/3PYdV7SW,有很多:ENOENT(没有这样的文件或目录),但我不知道它是否相关跨度>
  • ENOENT 很常见,因为在许多不同的路径中尝试了许多文件打开操作,但找不到文件(ENOENT)而不会出现错误。我通常从最后开始阅读这些类型的 strace 转储。我们可以看到在错误之前有一个 futex 调用,但我担心这个 strace 对我来说意义不大(也许它对其他更了解 nmcli 内部原理的人有意义)。也许 nmcli 正在尝试与其他服务通信并且失败了:/。另请阅读:success.docker.com/article/should-you-use-networkmanager

标签: docker networkmanager


【解决方案1】:

networkmanager 的特点是它运行在 dbus 上。我做了同样的事情(追踪并查看需要什么)

尝试将/var/run/dbus 挂载为卷。

sudo docker run --privileged --net host -it --volume /var/run/dbus image_with_network-manager /bin/bash

【讨论】:

    【解决方案2】:

    我这样运行我的容器:

    docker run -d -it --privileged=true --net host --volume /var/run/dbus:/var/run/dbus [other args here] 在 Ubuntu18.04 上,它可以工作。

    注意:--volume /var/run/dbus:/var/run/dbus 而不是--volume /var/run/dbus,上面的卷共享标志用于共享外部系统的总线。如果您需要容器拥有自己的总线,则需要进行不同的配置。

    【讨论】:

      【解决方案3】:

      在 docker 中尝试,这会在 docker 中创建自己的 dbus

      docker run -it --net=host image_name
              
      dbus-uuidgen > /var/lib/dbus/machine-id
      mkdir -p /var/run/dbus
      dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        • 2022-01-19
        • 2016-12-29
        • 2020-01-07
        • 2015-06-25
        • 2018-10-03
        相关资源
        最近更新 更多