实验环境
ubuntu 18.04(gnome桌面)
navicat 15
docker 20.10.8
准备环境
没有图像需要安装,有就忽略
sudo apt-get install x11-xserver-utils
#每次打开新的终端都需要执行一下,docker的图像才允许连接
xhost +
构建navicat的镜像
使用Dockerfile构建,基于空白的ubuntu镜像构建,运行navicat,会缺少不少的库,根据报错安装需要的包,以下是试验出的Dockerfile文件
#基于Ubuntu镜像
FROM ubuntu:20.04
#定一个工作目录,可选,根据自己情况来
RUN mkdir /opt/navicat
WORKDIR /opt/navicat
#把准备好的linux版本navicat放到同级目录下
COPY navicat15-premium-cs.AppImage /opt/navicat
#复制本机的localtime文件到同级目录下,忘记什么原因了。。。。
COPY localtime /etc/localtime
#授权可执行
RUN chmod a+x /opt/navicat/navicat15-premium-cs.AppImage
#换个apt源,自带的源没问题的话,可以不用
RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
RUN sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
RUN sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
#防止update源报错中止操作(有些源报错不影响,但是会停止),把后续的步骤加上了||让它执行成功
#根据报错安装一些需要的包
RUN apt-get update || apt install -y libfuse2
RUN apt install -y libglib2.0-0/focal
RUN apt install -y libgl1-mesa-glx
RUN apt install -y libpango-1.0-0/focal
RUN apt install -y libpangocairo-1.0-0/focal
#中文支持
RUN apt install -y fonts-noto-cjk
#需要读取机器的UUID,容器里面没有,生成一个
RUN apt install -y uuid
RUN uuid | tr -d "-" > /etc/machine-id
CMD ["./navicat15-premium-cs.AppImage"]
docker build -t “navicat:v15” .
启动navicat容器
#-v /tmp/.X11-unix/ X11文件挂载进去,共享本地unix端口
# -e DISPLAY=unix$DISPLAY #修改环境变量DISPLAY 把docker 的设置和主机一样
#。。。
docker run -it -v /tmp/.X11-unix/:/tmp/.X11-unix/ -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE --cap-add SYS_ADMIN --device /dev/fuse --security-opt apparmor=unconfined --name navicat navicat:v15
关闭后下次启动方式
docker start navicat
#不清楚navicat运行把注册信息放到什么地方,所以懒得找了
#过期了,把docker删除一下重新启动即可,速度快,删除前把配置导出来,再导进去即可
常见问题
无法连接display :0
可能1:尝试过使用ubuntu的软件商店安装docker,发现挂载/tmp的东西进去,里面是没有文件的,导致X11-unit目录没挂载进去出现问题
可能2:每次登录都需要执行xhost +
其他可能
这个思路对于其他的软件也行的通,如果是windows的软件,需要利用wine这个工具实现windows在linux运行,再用上面的思路透传出来,实现容器化windows软件测试了windows几个软件,多多少少都有点问题,不是安装不了,就是运行不起来,不然就是运行起来使用有问题,还需要试验一下。