Docker容器显示图形到宿主机屏幕

Docker本身的工作模式是命令行的,但是如果运行在docker中的应用需要显示图形界面如何能实现呢?
可以通过在宿主机安装xserver,将docker容器视为客户端,通过网络或挂载的方式就可以实现将需要显示的图像显示在宿主机显示器。

1.网络方式(此方式也可以用于两主机间)

A.在宿主机
查看宿主机IP
$ ifconfig                          ##假设为xxx.xxx.xxx.xx
查看当前显示的环境变量值
$ echo $DISPLAY   (要在显示屏查看,其他ssh终端不行)  ##假设为:0
或通过socket文件分析:
$ ll /tmp/.X11-unix/                            ##假设为X0= ---> :0

安装xserver
$ sudo apt install x11-xserver-utils
$ sudo vim /etc/lightdm/lightdm.conf 
增加许可网络连接
[SeatDefaults]
xserver-allow-tcp=true
重启xserver
$ sudo systemctl restart lightdm
许可所有用户都可访问xserver
xhost +


B.在docker 容器内
# export DISPLAY=xxx.xxx.xxx.xx:0
注意:环境变量设置需要每次进docker设置,可以写在:/etc/bash.bashrc 文件中,避免每次进终端时设置

2.挂载方式
挂载方式是在使用image创建docker容器时,通过-v参数设置docker内外路径挂载,使显示xserver设备的socket文件在docker内也可以访问。并通过-e参数设置docker内的DISPLAY参数和宿主机一致。

A.在宿主机
查看宿主机IP
$ ifconfig                          ##假设为xxx.xxx.xxx.xx
查看当前显示的环境变量值
$ echo $DISPLAY   (要在显示屏查看,其他ssh终端不行)  ##假设为:0
或通过socket文件分析:
$ ll /tmp/.X11-unix/                            ##假设为X0= ---> :0

安装xserver
$ sudo apt install x11-xserver-utils
许可所有用户都可访问xserver
xhost +


B.在docker 容器创建时
-v /tmp/.X11-unix:/tmp/.X11-unix
-e DISPLAY=:0

例如:
docker run -itd --name 容器名 -h 容器主机名 --privileged \
           -v /tmp/.X11-unix:/tmp/.X11-unix  \
           -e DISPLAY=:0 镜像名或id /bin/bash

3.验证:
使用带有界面功能的时钟软件尝试

在docker容器中:
$ sudo apt-get install xarclock
$ xarclock
应该可以看到xserver端显示器显示时钟界面。

参考文章:
https://www.csdn.net/article/2015-07-30/2825340
https://blog.csdn.net/wzw_mzm/article/details/70916202

  • 13
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
您好!对于 Docker Superset 无法连接宿主机 MySQL 的问题,可以尝试以下解决方案: 1. 确保宿主机 MySQL 服务正常运行,并且已经配置了正确的用户名、密码以及数据库连接信息。您可以在宿主机上使用命令行或者图形化工具来验证连接是否正常。 2. 在 Docker 运行 Superset 容器时,确保正确映射了宿主机 MySQL 的端口。例如,如果宿主机 MySQL 使用的是默认的 3306 端口,则可以使用以下命令来运行 Superset 容器: ``` docker run -p 8088:8088 -e SUPERSET_CONFIG=superset.config -e SUPERSET_CONFIG=superset.config -v /path/to/superset:/home/superset superset ``` 其,`-p 8088:8088` 表示将容器的 8088 端口映射到宿主机的同样端口,`-v /path/to/superset:/home/superset` 表示将宿主机的 Superset 配置文件目录挂载到容器。 3. 在 Superset 的配置文件,确保正确配置了 MySQL 数据库的连接信息。您可以在 Superset 配置文件找到以下配置项,并根据宿主机 MySQL 的配置进行相应修改: ``` SQLALCHEMY_DATABASE_URI = 'mysql://username:password@hostname:port/database_name' ``` 其,`username`、`password`、`hostname`、`port` 和 `database_name` 需要替换为宿主机 MySQL 的实际信息。 4. 如果仍然无法连接,可以尝试检查宿主机防火墙设置,确保允许 Superset 容器访问宿主机 MySQL 的网络连接。 希望以上解决方案对您有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值