docker 启动GUI程序
2022/3/8 20:15:00
本文主要是介绍docker 启动GUI程序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
安装docker,并设置镜像加速器
curl -sSL https://get.daocloud.io/docker | sh
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://g5uyhrgn.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
GUI的准备工作
-
在宿主机中下载x11软件并开放权限
sudo apt-get install x11-xserver-utils
xhost + #是开放权限,允许所有用户,当然包括docker,访问X11 的显示接口,正常返回access control disabled, clients can connect from any host
xhost 是用来控制X server访问权限的。通常当我们从宿主机登陆到docker上,运行docker上的应用程序时,做为应用程序来说,宿主机是client,但是作为图形来说,是要在宿主机上显示的,需要使用宿主机的Xserver,所以宿主机是server。因此在登陆到docker前,需要在宿主机上运行xhost +来使其它用户能够访问宿主机的Xserver。xhost + 是使所有用户都能访问宿主机的Xserver.xhost + ip使ip上的用户能够访问宿主机的Xserver。
有时在执行xhost会报出以下错误
xhost: unable to open display "XXXX"
解决方法:设置DISPLAY变量,DISPLAY用来设置将图形显示到何处,DISPLAY 环境变量格式如下hostname: displaynumber.screennumber
,在某些机器上,可能有多个显示设备共享使用同一套输入设备,例如在一台PC上连接两台CRT显示器,但是它们只共享使用一个键盘和一个鼠标。这一组显示设备就拥有一个共同的displaynumber,而这组显示设备中的每个单独的设备则拥有自己单独的 screennumber。displaynumber和screennumber都是从零开始的数字。这样,对于我们普通用户来说, displaynumber、screennumber就都是0。 hostname指Xserver所在的主机主机名或者ip地址, 图形将显示在这一机器上。
export DISPLAY=:0.0 xhost +
-
根据dockerfile创建image镜像
docker build -f dockerfile -t 镜像名 .
-
创建容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -dit -P -e DISPLAY=$DISPLAY --privileged --network=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw -v /dev/bus/usb:/dev/bus/usb -v /home/lfxs/StudioData:/StudioData --name gui01 mydb:0.1 /bin/bash #-d: 后台运行容器,并返回容器ID #-i: 以交互模式运行容器,通常与 -t 同时使用; #-P: 随机端口映射,容器内部端口随机映射到主机的端口 #-p: 指定端口映射,格式为:主机(宿主)端口:容器端口 #-e:设置环境变量 #--privileged 是否允许Docker运行的容器拥有root权限 #--network指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;常用bridge和host #-v:绑定一个卷 #--name :容器名
通过ssh 连接docker,并运行GUI程序
命令:
ssh -Y 用户名@容器名 -p port
说明:在/etc/hosts 中指定ip和容器的对应关系,添加192.168.2.68 gui01
,由于network设置为hosts模式,容器和宿主机共用一个network namespaces,使用宿主机的IP和port。
然后通过命令/etc/init.d/ssh status
查看宿主机和容器中ssh是否是开启的,如果没有开启使用命令
systemctl restart sshd.service
打开/etc/ssh/sshd_config,添加端口号
port=10002
重启ssh服务
/etc/init.d/ssh restart
还有以下几种方式登录docker
ssh -Y -l 用户名 ip -p port ssh -Y 用户名@ip -p port
测试docker中GUI在宿主机上显示,在docker中下载xarclock
sudo apt-get install xarclock xarclock
遇到的问题
- 创建容器时如果设置network为host模式时,要指定在容器中执行/bin/bash。如果不指定,可能会出现容器启动不了的问题。
- 修改lightmd.conf导致图形界面崩溃。
https://blog.csdn.net/u012570215/article/details/102946670
这篇关于docker 启动GUI程序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-17docker 里面的postgis没有中文支持,如何解决?-icode9专业技术文章分享
- 2024-11-17宿主机上开了阿里云的代理,在docker容器内ping不通阿里云的内网ip什么原因?-icode9专业技术文章分享
- 2024-11-17怎么配置docker dns?-icode9专业技术文章分享
- 2024-11-15在树莓派上用Docker-in-Docker模拟Docker Swarm集群
- 2024-11-14Docker端口:你真的公开了哪些东西?
- 2024-11-14用DOCKER在家里的实验室里搞些酷炫的玩意儿
- 2024-11-05掌握Docker:高效安全的十大最佳实践
- 2024-11-05在 Docker Compose 中怎么设置端口映射-icode9专业技术文章分享
- 2024-11-05在 Docker Compose 中怎么设置环境变量-icode9专业技术文章分享
- 2024-11-04Docker环境部署项目实战:新手入门教程