设置运行在docker中的jupyter notebook能远程访问

看了很多教程都是讲如何使jupyter notebook能够被远程访问,但是没有讲docker中的jupyter notebook如何被远程访问,因此在这里记录一下
参考的博客:

1.https://www.cnblogs.com/shijf/p/10386193.html
2.https://blog.csdn.net/powerccna/article/details/78583510
3.https://www.jianshu.com/p/3cc167bd63dd

核心就是要记录下当时run容器时所使用的(真实的)本机端口号

步骤

  1. 起容器

sudo docker run --name lin -p 10000:8888 [镜像名称]:[tag] -it /bin/bash

其中10000是宿主机的端口号,8888是docker映射过去的端口号
(我的理解就是,在虚拟化技术的docker下,里面显示运行在8888的应用实际上是运行在宿主机10000下面的)

这个10000可以随意更改只要不冲突就行了。8888最好别改,因为jupyter 默认运行在8888端口号上,如果改了的话还得同步更改jupyter的配置文件

那假如一开始没有配置端口映射呢,那就请参照第一个链接里的方法。

在这里我采用的是利用docker commit新构镜像。因为我用的是实验室的服务器,不能随意更改他人的docker.具体做法:

  • 停止docker容器

    docker stop container01

  • commit该docker容器

    docker commit container01 new_image:tag

  • 用前一步新生成的镜像重新起一个容器

    docker run --name container02 -p 10000:8888 new_image:tag

  1. 接下来修改jupyter的配置文件,参考了第二个博客的做法
  • 生成配置文件

     [root@50eb5057baac /]# jupyter notebook --generate-config  
      Writing default config to: /root/.jupyter/jupyter_notebook_config.py 
    
  • 生成密码
    输入ipython,进入ipython命令行

In [1]: from notebook.auth import passwd

In [2]: passwd()

这里要求你输入以后登录使用的密码,然后生成一个秘钥。这里的秘钥等会修改jupyter配置的时候会用到

Enter password: 
Verify password: 
Out[2]: 'sha1:1b4ea9662b35:3e3d6a823d264d466f125a0939623c05e7b66007'
  • 修改默认配置文件
    修改用户主目录下~/.jupyter/jupyter_notebook_config.py文件
    取消c.NotebookApp.password = ‘’"注释,并将生成的秘钥复制进去
c.NotebookApp.password = 'sha1:1b4ea9662b35:3e3d6a823d264d466f125a0939623c05e7b66007'

取消下面几项注释

c.NotebookApp.ip='*'#×允许任何ip访问
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #可自行指定一个端口, 访问时使用该端口
c.NotebookApp.allow_remote_access = True #允许远程访问
  • 启动jupyter notebook

在命令行输入

jupyter notebook --allow-root

然后会显示

[W 13:23:21.293 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 13:23:21.300 NotebookApp] Serving notebooks from local directory: /notebooks
[I 13:23:21.300 NotebookApp] The Jupyter Notebook is running at:
[I 13:23:21.300 NotebookApp] http://(2a781d431eae or 127.0.0.1):8888/
[I 13:23:21.300 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

注意 远程访问127.0.0.1:8888是不行的,这个ip地址其实是用于本地访问的ip地址。如果想远程访问jupyter notebook的网页,应该在浏览器输入的是 [服务器ip]:8888

好了 终于成功了
设置运行在docker中的jupyter notebook能远程访问_第1张图片

-----------------------------下面是一点点无关的内容-------------------------------------
这两天磕磕绊绊配好了环境,用keras简单跑了一个MNIST手写体识别的例子,对比下使用GPU和不使用GPU的速度:)

设置运行在docker中的jupyter notebook能远程访问_第2张图片
使用GPU

设置运行在docker中的jupyter notebook能远程访问_第3张图片
不使用GPU

快了3-4倍的样子(整挺好.jpg)

你可能感兴趣的:(设置运行在docker中的jupyter notebook能远程访问)