Docker
設置 docker 容器以通過 d-bus 與主機通信
我正在創建兩個應用程序,主控和從屬,它們通過 d-bus 進行通信。在同一主機上執行時,我的應用程序按預期工作。
現在我想將從屬應用程序移動到 docker 容器,並且在主機和容器之間共享 d-bus 會話時遇到問題。這是我的 Dockerfile:
來自 i386/ubuntu:16.04 音量/執行/使用者/1000/ ENV DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus 執行 apt-get 更新 執行 apt-get upgrade -y 執行 apt-get install -y dbus #RUN apt-get install -y libnotify-bin #RUN apt-get install -y dbus-x11 執行 adduser -u 1000 myuser #COPY dbus.conf /etc/dbus-1/session.d/ 使用者 1000:1000 入口點 ["dbus-daemon", "--session", "--print-address"]
/run/user/1000/bus 是我的 DBUS_SESSION_BUS_ADDRESS 變數的值。
我用
docker create --mount type=bind,source=/run/user/1000/bus,target=/run/user/1000/bus mycontainer
/run/user/1000/bus 在容器內是可見的,但是當容器啟動時它會列印地址
unix:abstract=/tmp/dbus-iXrYzptYOX,guid=78a790f0f6a4387a39ac3d505da478a3
我的應用程序無法通信。
如果我將我的 dbus.conf 添加到容器中的 /etc/dbus-1/session.d/ 並覆蓋
<listen>unix:path=/run/user/1000/bus</listen>
我收到消息“無法啟動消息匯流排:無法綁定套接字“/run/user/1000/bus”:地址已在使用中”
我不確定我是否應該在 docker 中啟動 dbus-daemon。
我怎樣才能使這項工作?
我找到了解決方案。這是我的 Dockerfile:
來自 i386/ubuntu:16.04 執行 apt-get 更新 執行 apt-get upgrade -y 執行 apt-get install -y dbus 複製 dbus.conf /etc/dbus-1/session.d/ 入口點 ["dbus-run-session", "slaveApp"]
還有我的 dbus.conf:
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <listen>tcp:host=localhost,bind=*,port=6667,family=ipv4</listen> <listen>unix:tmpdir=/tmp</listen> <auth>ANONYMOUS</auth> <allow_anonymous/> </busconfig>
並在主機上設置地址變數:
導出 DBUS_SESSION_BUS_ADDRESS=tcp:host=${containerIp},port=6667,family=ipv4
在我的主應用程序中,我啟動了一個連接(我使用了 Qt):
QDBusConnection::connectToBus("tcp:host=${containerIp},port=6667", "qt_default_session_bus");
主應用程序現在可以向從屬應用程序發送消息。不過,我還沒有嘗試將消息從奴隸發送到主人。