写在前面
为了复现一个pytorch的代码,花了一天时间配置容器,就是为了省事,直接在网上找了一个pytorch-opencv的镜像,从镜像创建容器,然后配置容器的可视化界面vncserver,期间出现了各种问题,记录下来解决方案。
pytorch-opencv的镜像
在github上找到大神配置好的镜像,这里直接贴出来: 命令行pull pytorch镜像,或者修改dockerfile然后创建pytorch镜像.
#sudo docker pull rwightman/pytorch-opencv
pull下来镜像后,可以查看现有的镜像有哪些
# sudo docker images
可以看到镜像已经pull到本地了
基于镜像新建容器并启动
# sudo docker run -it rwightman/pytorch-opencv:latest /bin/bash
启动后用查看容器是否创建好
# sudo docker ps -a
注意如果用sudo docker ps命令只能查到当前正在运行的容器,加** - a **可以查看所有容器
根据CONTAINER ID,就可以启动容器
# sudo docker start CONTAINER ID
# sudo docker attach CONTAINER ID
启动后,显示如下
# root@CONTAINER ID:
接下来就是在容器内配置可视化图形界面
vncserver安装与配置
- 更新源及系统:apt update -y
# root@CONTAINER ID: apt update -y
由于现在的容器环境非常干净,也就是什么都没有,直接运行update会一直显示working, 你以为是因为要更新的东西太多,等了好几个小时依然还是working的话,首先判断是否是源列表的问题,修改源列表,我直接下载的中科大的源,替换了本地/ect/apt/sources.list 文件内容(建议先备份),运行update 依然显示0%[working],继续排查,可能是docekr环境太纯净,缺乏必要的包apt-transport-https,由于目前没有安装命令,只能从主机上下载了.deb文件,然后拷贝到容器里
#sudo docker cp apt-transport-https_1.2.32_amd64.deb 1482e1bcf386:/workspace
然后安装apt-transport-https
#dpkg -i apt-transport-https_1.2.32_amd64.deb
安装成功后再update,这次直接报错
root@1482e1bcf386:/workspace# apt update -y
Reading package lists... Done
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
这是因为刚才运行了update的,强制退出了但是后台进程还在,运行ps -e | grep apt查看一下
root@1482e1bcf386:/workspace# ps -e | grep apt
43 pts/0 00:00:00 apt
删掉/var/lib/apt/lists/lock文件即可
root@1482e1bcf386:/workspace# rm /var/lib/apt/lists/lock
接下来运行update就没有再出问题了。
- 安装桌面环境
# apt install ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal -y
- 安装 vncserver
# apt install vnc4server -y
- 配置 vncserver
# vim ~/.vnc/xstartup
在文件最下面加上
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
按一下键盘上的i就进入了插入模式,粘贴完毕后,按 Esc 退出插入模式,然后输入’:wq!’+Enter键即可保存退出,整体文件内容如下图所示5. 启动vncserver,并设置图形界面的大小
vncserver -geometry 1600x1080
然后就可以在主机上的vncserver里打开容器了!