美文网首页
docker运行jupyter逐步操作笔记

docker运行jupyter逐步操作笔记

作者: dreadnaught | 来源:发表于2020-06-23 16:34 被阅读0次

    运行环境:在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 来达成,后面可以试试

    相关文章

      网友评论

          本文标题:docker运行jupyter逐步操作笔记

          本文链接:https://www.haomeiwen.com/subject/fdphfktx.html