算能科技
直播中

杨帆

7年用户 1400经验值
私信 关注
[经验]

如何在docker容器内使用宿主机上的显示设备显示图像?

解决方案1:启动容器时添加配置选项,使用宿主机显示器显示画面 目前的主流图像界面服务X11支持客户端/服务端(Client/Server)的工作模式,只要在容器启动的时候,将 『unix:端口』或『主机名:端口』共享给docker,docker 就可以通过端口找到显示输出的地方,和linux系统共用显示设备:

  •         宿主机安装x11-server:
            sudo apt-get install x11-xserver-utils
  •         开放权限,允许所有用户,当然包括docker,访问X11 的显示接口:
            xhost +
  •         修改启动docker容器脚本,增加选项:
            -v /tmp/.X11-unix:/tmp/.X11-unix      #共享本地unix端口-e DISPLAY=unix$DISPLAY               # 修改环境变量DISPLAY-e GDK_SCALE                          # 与显示效果相关的环境变量-e GDK_DPI_SCALE
解决方案2:已经启动的容器,通过网络IP连接到x11 server显示图像(本地或局域网内其他主机都可以) 若不想重新启动容器,可以通过IP地址来映射显示设备从而显示图像:

  •         查询x11 server主机IP:假设为192.168.150.100
  •         设置x11 server权限:
            sudo gedit /etc/lightdm/lightdm.conf #增加一行 xserver-allow-tcp=truesudo systemctl restart lightdmxhost + #注意加号前应有空格        注解:如果您使用的系统的桌面管理器不是lightdm,那么配置文件可能会不一样。比如ubuntu18.04以上默认使用gdm3,其配置文件为/etc/gdm/custom.conf,您需要在[security]下增加AllowRemoteAutoLogin=true,[xhmcp]下增加Enable=true, Port=177。重启gdm服务的命令为:service gdm restart
  •         在docker容器中设置DSIPLAY变量:
            export DISPLAY= 192.168.150.100:0.0
测试是否成功
您可以在docker中安装以下显示时钟的小程序来验证显示设备已被正确配置
sudo apt-get install xarclock # 安装这个小程序xarclock # 运行,如果配置成功,会显示出一个小钟表动画
说明:以上操作主要针对Linux,若您想使用windows或者Mac主机作为显示设备,原理是相似的,请查找类似解决方案配置即可。

更多回帖

发帖
×
20
完善资料,
赚取积分