Docker容器中运行程序,有时候需要显示容器中的图像,或在容器中运行一些图形界面的软件、调用摄像头等,而Docker采用的是命令行的工作模式,Docker容器可以采用文件挂载或者网络通信的方式中的输出图像等方式在宿主屏幕上显示。
系统信息
- Deepin20.7
- Docker 19.03.8
- Docker-compose 1.29.2
本地安装X11界面工具。
UOS、Deepin已经默认安装好了
sudo apt-get install x11-xserver-utils
xhost + 是开放权限,允许所有用户包括docker访问X11的显示接口,重启后,需要在本地执行一次 xhost +
xhost +
添加参数
-v /tmp/.X11-unix:/tmp/.X11-unix # 挂载本地显示服务端口到容器中
-e DISPLAY=unix$DISPLAY # 修改环境变量DISPLAY
-e GDK_SCALE # 与显示效果相关的环境变量
-e GDK_DPI_SCALE # 同上
创建容器
测试镜像ubuntu:20.04
sudo docker run -itd --name ubuntu20 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
ubuntu:20.04
创建成功
进入容器
sudo docker exec -it ubuntu20 bash
测试容器
采用一个显示时钟的程序xarclock进行测试,在启动的容器内部安装该程序
apt update -y # 更新软件源
apt upgrade -y # 升级软件
apt install xarclock # 安装
xarclock # 运行
运行成功
尝试运行Matplotlib
容器中安装python3
apt install python3 # 安装python
apt install python3-pip # 安装pip工具
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 修改pip源为清华源
pip3 install -U pip # 升级pip工具
安装Matplotlib
pip3 install matplotlib
在容器中Matplotlib使用的是agg,这是一个非图形用户界面的后台,因此无法显示该图。在终端安装一下软件
apt install tcl-dev tk-dev python-tk python3-tk
安装过程中可能需要选择时区,选择6亚洲
70上海
绘制柱状图
代码
tee main.py << EOF
import matplotlib.pyplot as plt
import matplotlib
import tkinter
matplotlib.use('TkAgg')
x = [1, 2, 3, 4]
y = [1, 2, 3, 4]
y1 = [e+1 for e in y]
y2 = [e+2 for e in y]
y3 = [e+3 for e in y]
plt.bar(x, y)
plt.show()
EOF
python3 main.py
运行成功文章来源:https://www.toymoban.com/news/detail-477727.html
参考
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend
本地宿主机器显示Docker 容器中的图像(Docker容器可视化)文章来源地址https://www.toymoban.com/news/detail-477727.html
到了这里,关于Docker容器可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!