Technical FAQ

答:

解决方案1:启动容器时添加配置选项,使用宿主机显示器显示画面

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

  1. 宿主机安装x11-server:sudo apt-get install x11-xserver-utils
  2. 开放权限,允许所有用户,当然包括docker,访问X11 的显示接口:xhost +
  3. 修改启动docker容器脚本,增加选项:
    -v /tmp/.X11-unix:/tmp/.X11-unix \ #共享本地unix端口
    -e DISPLAY=unix$DISPLAY \ # 修改环境变量DISPLAY
    -e GDK_SCALE \ # 与显示效果相关的环境变量
    -e GDK_DPI_SCALE
  4. 重新启动docker容器

 

解决方案2:已经启动的容器,通过网络IP连接到x11 server显示图像(本地或局域网内其他主机都可以)

若不想重新启动容器,可以通过IP地址来映射显示设备从而显示图像:

  1. 查询x11 server主机IP:假设为192.168.150.100
  2. 设置x11 server权限:
    sudo gedit /etc/lightdm/lightdm.conf #增加一行 xserver-allow-tcp=true
    sudo systemctl restart lightdm
    xhost + #注意加号前应有空格

    备注:如果您使用的系统的桌面管理器不是lightdm,那么配置文件可能会不一样。比如ubuntu18.04以上默认使用gdm3,其配置文件为/etc/gdm/custom.conf,您需要在[security]下增加AllowRemoteAutoLogin=true,[xhmcp]下增加Enable=true, Port=177。重启gdm服务的命令为:service gdm restart
  3. 在docker容器中设置DSIPLAY变量:export DISPLAY= 192.168.150.100:0.0

 

测试是否成功

您可以在docker中安装以下显示时钟的小程序来验证显示设备已被正确配置

sudo apt-get install xarclock # 安装这个小程序

xarclock # 运行,如果配置成功,会显示出一个小钟表动画

 

说明:以上操作主要针对Linux,若您想使用windows或者Mac主机作为显示设备,原理是相似的,请查找类似解决方案配置即可。