docker_修改TensorFlow官方docker_image的jupyter登陆密码

官方docker镜像地址:https://hub.docker.com/r/tensorflow/tensorflow/

直接跑docker镜像,第一次进入容器后有token显示可以用来登录,退出容器第二次进入后找不到token,然后就有了以下曲线救国的方式

注:tensorflow镜像 是跑在 vm虚拟机 的 ubuntu16.04 系统里,ip为 192.168.23.128,我是在 物理机 上打开 jupyter notebook 网页的


  1. pull 镜像

    1
    $ docker pull tensorflow/tensorflow
  2. run 镜像,生成容器实例,第一次进入会执行 /run_jupyter.sh,会有 token 让你进入 localhost:8888 页面是可以输入并登录

    1
    $ docker run -it -p 8888:8888 tensorflow/tensorflow
  3. 第二次进入后,不显示 token,用 $ jupyter notebook list 命令也不显示 jupyter server 和 token,采取曲线救国的办法是 设置密码登录 ,修改配置文件 ~/.jupyter/jupyter_notebook_config.py

    1
    2
    3
    4
    5
    6
    7
    root@8c9ac8d5f947:~# vi ~/.jupyter/jupyter_notebook_config.py

    # 修改里面的 password 配置,我这里注释掉了使用环境变量 PASSWORD,直接明文密码 yangx,password()函数是个 hash函数
    # sets a password if PASSWORD is set in the environment
    #if 'PASSWORD' in os.environ:
    c.NotebookApp.password = passwd("yangx")
    # del os.environ['PASSWORD']
    • 修改后 ~/.jupyter/jupyter_notebook_config.py 文件

      1
      2
      3
      4
      5
      6
      7
      8
      import os
      from IPython.lib import passwd

      c.NotebookApp.ip = '*'
      c.NotebookApp.port = int(os.getenv('PORT', 8888))
      c.NotebookApp.open_browser = False
      c.MultiKernelManager.default_kernel_name = 'python2'
      c.NotebookApp.password = passwd("yangx")
  4. 修改后 kill 掉该进程,会自动退出容器并stop

    1
    2
    3
    4
    5
    6
    7
    root@8c9ac8d5f947:~# netstat -tulpn #查询占用8888端口的进程并kill掉
    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:8888 0.0.0.0:* LISTEN 7/python
    tcp 0 0 127.0.0.1:55355 0.0.0.0:* LISTEN 36/python
    tcp6 0 0 :::8888 :::* LISTEN 7/python
    root@8c9ac8d5f947:~# kill 7
  5. 重新启动容器并进入

    1
    2
    3
    4
    wilker@ubuntu:~$ docker start 8c9ac8d5f947
    8c9ac8d5f947
    wilker@ubuntu:~$ docker exec -it 8c9ac8d5f947 /bin/bash
    root@8c9ac8d5f947:/notebooks#
  6. 打开浏览器输入密码 yangx

    这里写图片描述

    ok,done

    这里写图片描述

    然后就可以愉快的玩耍了

    这里写图片描述