文章目录
- 环境描述
- 一、遇到问题
- 二、网上解决方法(无效)
- 1.采用matplotlib.use('Agg')
- 2采用Xming+shell(也没解决)
- 3.采用XShell+Xmanager
- 三、采用MobaXterm+配置端口映射
- 四.修改密码
环境描述
win7
docker安装,基于Oracle VM
镜像文件docker run -it -p 4567:4567 -v ‘pwd’:/work udacity/controls_kit:latest,自动下载
shh工具Xshell 和mobaXterm
提示:以下是本篇文章正文内容,下面案例可供参考
一、遇到问题
之前一直通过Xshell连接docker,连接的是docker本身,然后执行docker run运行image,利用docker attach [容器]name,就可以操作容器了,但是在容器里写python代码,运行时Xshell无法看到plt.show() 的图像,报错为_tkinter.TclError: no display name and no $DISPLAY environment variable,于是就按照网上教程进行修改
二、网上解决方法(无效)
1.采用matplotlib.use(‘Agg’)
代码如下(示例):参照here
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
2采用Xming+shell(也没解决)
参考here 运行后无反应,可能不知道Xming怎么用
3.采用XShell+Xmanager
三、采用MobaXterm+配置端口映射
参考here,进行配置,但是最后还进不去,因为开始的时候只设置了4567:4567端口映射
通过docker ps查看容器及其端口,发现只有0.0.0.0:4567->4567/tcp, Image的地址是docker虚拟的,为172.17.0.2
先通过Oracle配置虚拟机和docker的端口对应,将PC的5001和虚拟机的5001对应,然后在docker中将5001和Image的22号端口对应,这样ssh从PC端就可通过访问docker的IP192.168.99.100,自动端口转发访问到Image的22号端口
前期运行时只设置了4567:4567,并没有5001:22的映射,所以需要给容器加入。参考here和here进行配置,但是前提都是停止docker服务,否则设置好了启动配置也会自动失效,所以一定要先停止。
运行service docker stop
-sh: service: not found
运行systemctl start docker
-sh: systemctl : not found
查原因如下:
由于上面查询的操作系统版本是centos 6.5我们使用service docker stop停止容器服务,重点:(/etc/init.d/docker stop也可)
centos 7之后改变服务的启动和关闭方式,可以使用命令systemctl stop docker来关闭
设置操作后,重新启动,采用docker ps查看容器
操作成功!,显示了0.0.0.0:4567->4567/tcp, 0.0.0.0:5001->22/tcp,两个端口
四.修改密码
连接过程经常需要设置密码
docker切换root不需要,采用sudo su
Image需要用户名:root;密码:123456.可以采用passwd设置
docker本身ssh需要用户名:docker;密码:tcuser,可改为1234567等。
连接ssh后,设置自启动
采用uname -a (Linux查看版本当前操作系统内核信息),然后根据参考here查阅启动位置,修改bash.bashrc文件,在最后一行加上:
/etc/init.d/ssh start
即可实现docker容器开机自动启动ssh