也许这是一个有点奇怪的问题,但不知何故,我不知道是否可以在 docker 容器中启动并运行 dbus 并将其用作消息中间件。
实际用例如下:有 3 个小服务,运行在嵌入式设备上。这些服务是用 Go 语言编写的应用程序。所有三个服务都使用 dbus 相互交换消息。
我想要实现的是使用这些应用程序和 dbus 等支持服务创建一个 docker-compose 文件,以便本地开发能够仅用一个命令来引导所有这些内容。
所以我想开始对 dbus 进行 docker 化,但我真的不知道如何做到这一点(说实话,如果可能的话)。因此,我在 MacOS 上运行了三个应用程序,我希望它们通过 dbus 进行通信,dbus 在 Docker 容器中运行。
有什么想法、建议、教程等吗?
我的第一步是在映像中安装 dbus,但下一步是什么?
FROM ubuntu:24.04
ENV DEBIAN_NONINTERACTIVE=yes
RUN apt-get update && apt-get install -y dbus libdbus-1-dev socat netcat-traditional
# Mount the session bus socket for use by other containers or hosts
VOLUME ["/run/dbus/session"]
CMD ["dbus-daemon", "--session"]
谢谢!
嘿在那里!这听起来像是您正在使用 Docker 和 D-Bus 为您的服务应对的一个有趣的挑战。在 macOS 上的 Docker 容器中设置 D-Bus 肯定有点棘手,但这是可行的。您可能需要遵循以下简单方法:
Dockerfile 设置:您的 Dockerfile 看起来很适合开始。只需确保您正在安装 D-Bus 和必要的库即可。您似乎已经涵盖了这一点。
Docker Compose:您需要创建一个
docker-compose.yml
文件来管理您的服务。该文件将帮助您用一个命令启动一切。这是您可以使用的基本大纲:
version: '3'
services:
dbus:
build:
context: .
dockerfile: Dockerfile
volumes:
- /run/dbus/session:/run/dbus/session
command: ["dbus-daemon", "--session"]
app1:
build:
context: ./app1
depends_on:
- dbus
environment:
- DBUS_SESSION_BUS_ADDRESS=unix:path=/run/dbus/session
app2:
build:
context: ./app2
depends_on:
- dbus
environment:
- DBUS_SESSION_BUS_ADDRESS=unix:path=/run/dbus/session
app3:
build:
context: ./app3
depends_on:
- dbus
environment:
- DBUS_SESSION_BUS_ADDRESS=unix:path=/run/dbus/session
将
./app1
、./app2
和 ./app3
替换为实际应用程序目录的路径。
运行您的设置:准备好
docker-compose.yml
后,您可以在终端中运行docker-compose up
。此命令将启动您的 D-Bus 服务和应用程序,允许它们进行通信。
测试:启动后,您可以登录容器并使用
dbus-send
或dbus-monitor
等工具来检查您的应用程序是否能够通过D-Bus进行通信。
其他帮助:如果您遇到任何困难,搜索 Docker 和 D-Bus 教程可以为您提供更多示例和详细信息。那里有很多很棒的资源!
希望这可以帮助您入门!如果您还有其他问题,请告诉我。