文章目录

  • 环境描述
  • 一、遇到问题
  • 二、网上解决方法(无效)
  • 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

这个可能解决,因为是一家的软件,参考herehere



三、采用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号端口

termux运行docker教程 termux跑docker_端口映射


前期运行时只设置了4567:4567,并没有5001:22的映射,所以需要给容器加入。参考herehere进行配置,但是前提都是停止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查看容器

termux运行docker教程 termux跑docker_端口映射_02


操作成功!,显示了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