首页 > 解决方案 > Docker Swarm 中的蓝牙

问题描述

有没有办法在 Docker Swarm 模式下将蓝牙暴露给容器?

我看到人们通常使用--net=hostdocker,但network_mode: hostswarm 忽略了 Docker Compose 的等价物。

我还看到了使用本地主机网络的建议,如下所示:

networks:
  host:
    name: host
    external: true

不幸的是,我仍然需要使用数据库和 Traefik 的代理访问其他一些网络,并且访问主机网络需要不使用任何其他网络,否则会出错

container sharing network namespace with another container or host cannot be connected to any other network

我想知道是否有任何其他方式将 BT 暴露在容器中?顺便提一下,它在 Raspberry Pi 4 上,因此 BT 不是由单独的 USB 加密狗提供的

标签: dockerbluetoothraspberry-pidocker-swarm

解决方案


“有没有办法在 Docker Swarm 模式下将蓝牙暴露给容器?”

如果有问题的蓝牙设备在主机上打开了一个网络端口,并且容器是通过 docker swarm 管理的,那么以下代码段可能会有所帮助。管理蓝牙设备与访问蓝牙服务(例如 ftp 等)不是一回事。

“需要使用数据库和 Traefik 的代理访问其他一些网络”

要访问其他网络上的其他服务,您可以添加顶级网络部分并在服务网络部分中指定它们:

networks:
  database_network
    name: database_network
    external: true
  proxy_network
    name: proxy_network
    external: true
  ...

services:
  svc_name:
    image: ...
    networks:
      - database_network
      - proxy_network

“并且访问主机网络需要不使用任何其他网络,否则会出现错误”

端口需要将模式设置为“主机”:

ports:
  - published: 9888
    target: 80
    mode: host  # set the mode

但是,由于容器可以通过端口访问网络服务(即由运行在主机上的蓝牙应用程序创建),因此容器没有必要在主机网络中运行。


推荐阅读