如何让Kubuntu 20宿主机显示Docker应用的mix成功/错误通知
可行解决方案
步骤1:调整宿主机权限
首先在宿主机终端执行以下命令,临时允许root用户(容器默认运行用户)访问宿主机的X11和DBus相关接口:
xhost +local:root
该配置重启后会失效,如果需要永久生效可以把这条命令添加到~/.bashrc或者KDE的自动启动脚本中。
步骤2:容器启动时新增挂载和环境变量参数
运行容器时需要把宿主机的DBus会话套接字、X11相关目录挂载到容器内,同时传入对应的环境变量,才能让容器内的libnotify和宿主机的通知服务通信。
如果使用docker run命令启动,示例参数如下:
docker run -d \ -e DISPLAY=$DISPLAY \ -e DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v $XDG_RUNTIME_DIR/bus:$XDG_RUNTIME_DIR/bus \ # 保留你原来的其他配置,比如端口映射、项目目录挂载等 你的镜像名称
如果使用docker-compose部署,在对应的服务配置段添加以下内容即可:
services: laravel: # 替换为你自己的服务名 # 保留你原来的其他配置 environment: - DISPLAY=${DISPLAY} - DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} volumes: - /tmp/.X11-unix:/tmp/.X11-unix - ${XDG_RUNTIME_DIR}/bus:${XDG_RUNTIME_DIR}/bus
步骤3:验证配置有效性
容器启动后进入容器内部,执行以下命令测试通知发送:
notify-send "测试通知" "这是Docker容器发出的测试通知"
如果宿主机正常弹出通知,说明配置生效,后续Laravel Mix的构建通知就可以正常展示了。
注意事项
- 如果你的容器不是用root用户运行,需要把容器内运行用户的uid、gid调整为和宿主机当前用户一致,或者调整
$XDG_RUNTIME_DIR/bus的访问权限,避免权限不足无法访问DBus套接字。 - 上述配置仅适用于本地开发环境,生产环境不要添加这些配置,避免引入安全风险。
内容的提问来源于stack exchange,提问作者Petro Gromovo
相关产品推荐
相关产品推荐

