docker运行jupyter逐步操作笔记

2020-06-23  本文已影响0人  dreadnaught

运行环境:在VMware中运行一台OS为centos8的宿主机,在上面运行docker

目标:把fastai的镜像起起来,并且能够看到jupyter界面

分解:

看看人家的dockerfile写的啥

docker history spellrun/fastai --no-trunc=true

运行docker容器

问题:docker run完就挂了,没有持续运行

解决:没有使用交互式运行,应使用 docker run -t -i  spellrun/fastai  /bin/bash

为了映射端口试了下这样

docker run -it --rm -p 8888:8888 --entrypoint=bash  spellrun/fastai

#额外 设置--rm选项,这样在容器退出时就能够自动清理容器内部的文件系统

问题:jupyter启动失败

解决:

使用这个命令行,启动好像成功了

jupyter-notebook --no-browser --ip 0.0.0.0 --port=8888 --allow-root

映射jupyter端口出来

可以在虚拟机里面用127.0.0.1和宿主机ip地址192.168.132.128访问到了,但在远程还是访问不到。怀疑是宿主机配置有问题。

lsof 没看到有开888端口也是很诡异

在宿主机使用curl看到结果如下:

[root@localhost ~]# curlhttp://192.168.132.128:8888/

curl: (7) Failed to connect to 192.168.132.128 port 8888: Connection refused

[root@localhost ~]# curlhttp://127.0.0.1:8888/

curl: (56) Recv failure: Connection reset by peer

也许是ipv6问题,不太确定

在宿主机上执行:

[root@localhost ~]# netstat -nltp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    

tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           

tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1629/dnsmasq        

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1174/sshd           

tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      5908/cupsd          

tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           

tcp6       0      0 :::22                   :::*                    LISTEN      1174/sshd           

tcp6       0      0 ::1:631                 :::*                    LISTEN      5908/cupsd          

tcp6       0      0 :::8888                 :::*                    LISTEN      103094/docker-proxy

看到8888只开了tcp6么有开tcp

docker 使用桥接模式的时候默认使用ipv6地址,导致虚拟机挂起之后恢复无法访问端口。设置ipv4转发也没用

https://juejin.im/post/5d8cc0f451882509443bb0ae

感觉是没有映射到这个公网地址上去。

使用这个命令发现,docker的网络绑定好像绑到另一张网卡上去了

[root@localhost ~]# docker inspect happy_germain | grep IPAddress

            "SecondaryIPAddresses": null,

            "IPAddress": "172.17.0.2",

                    "IPAddress": "172.17.0.2",

所以看一下docker启动时如何指定网卡

解答:

docker run -it --rm -p 192.168.132.128:8888:8888 --entrypoint=bash  spellrun/fastai

果然可以了

接下来要解决jupyter 启动的密码

jupyter notebook --ip='*' --NotebookApp.token='' --NotebookApp.password=''

[ref]https://stackoverflow.com/questions/41159797/how-to-disable-password-request-for-a-jupyter-notebook-session

设置启动目录:

# c.NotebookApp.notebook_dir = ''  

然后是映射一个目录到宿主机

挂载磁盘到外面能pull到代码的地方

用-v {overlord_dir}:{docker_dir} 格式来指定挂载目录

docker run -it --rm -p 192.168.132.128:8888:8888 --entrypoint=bash -v /src/fastai_docker1:/src spellrun/fastai

启动 docker run

指定目录启动是NotebookApp.notebook_dir='/src'  

jupyter-notebook --no-browser --ip 0.0.0.0 --port=8888 --allow-root --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.notebook_dir='/src'  

【way2】 上面这些都是在jupyter 启动时用参数指定,也可以用docker加一层强写jupyter_application_config.py 来达成,后面可以试试

上一篇下一篇

猜你喜欢

热点阅读