看了很多教程都是讲如何使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容器时所使用的(真实的)本机端口号
步骤
- 起容器
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
- 接下来修改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
好了 终于成功了
-----------------------------下面是一点点无关的内容-------------------------------------
这两天磕磕绊绊配好了环境,用keras简单跑了一个MNIST手写体识别的例子,对比下使用GPU和不使用GPU的速度:)
使用GPU
不使用GPU
快了3-4倍的样子(整挺好.jpg)