docker jupyter笔记本地址永不响应/超时

时间:2018-12-19 04:56:47

标签: docker jupyter-notebook

尝试在docker映像(https://hub.docker.com/r/tensorflow/tensorflow)上使用jupyter-notebook,但遇到问题,即在浏览器中使用端口转发的地址只是挂在(chrome)主页上,上面写着Waiting for 127.0.0...,直到它只是超时。

正在运行的docker命令如下

➜  ~ docker run -it -p 8888:8888 --rm tensorflow/tensorflow:latest-devel-gpu-py3 jupyter-notebook --ip 0.0.0.0 --no-browser --allow-root
[I 04:26:44.023 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 04:26:44.042 NotebookApp] Serving notebooks from local directory: /root
[I 04:26:44.043 NotebookApp] The Jupyter Notebook is running at:
[I 04:26:44.043 NotebookApp] http://(f1afd4b163fd or 127.0.0.1):8888/?token=5a838cefbd58822ce3de5a9ab00ed724bc6f9e048017125a
[I 04:26:44.043 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 04:26:44.043 NotebookApp] 

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://(f1afd4b163fd or 127.0.0.1):8888/?token=5a838cefbd58822ce3de5a9ab00ed724bc6f9e048017125a

(请注意,也曾尝试docker run -it -p 8888:8888 --rm tensorflow/tensorflow:latest-devel-gpu-py3 /run_jupyter.sh --allow-root获得类似的吊销结果)。

检查docker ps显示

➜  ~ docker ps
CONTAINER ID        IMAGE                                        COMMAND                  CREATED              STATUS              PORTS                              NAMES
2114609d6d9d        tensorflow/tensorflow:latest-devel-gpu-py3   "jupyter-notebook --…"   About a minute ago   Up About a minute   6006/tcp, 0.0.0.0:8888->8888/tcp   mystifying_liskov

通过curl显示检查响应

➜  ~ curl -v http://127.0.0.1:8888/?token=5a838cefbd58822ce3de5a9ab00ed724bc6f9e048017125a
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8888 (#0)
> GET /?token=5a838cefbd58822ce3de5a9ab00ed724bc6f9e048017125a HTTP/1.1
> Host: 127.0.0.1:8888
> User-Agent: curl/7.47.0
> Accept: */*
> 

<at this point just hangs until I ctl+C out>


* Recv failure: Connection reset by peer
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer

检查端口显示

➜  ~ sudo netstat -plnt
[sudo] password for me: 
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:22              0.0.0.0:*               LISTEN      1512/sshd       
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      2485/cupsd      
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      2284/smbd       
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1502/mysqld     
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      2284/smbd       
tcp        0      0 127.0.0.1:5037          0.0.0.0:*               LISTEN      8558/adb        
tcp        0      0 127.0.0.1:6000          0.0.0.0:*               LISTEN      1006/unicorn.rb --h
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1954/monitorix-http
tcp6       0      0 :::22                   :::*                    LISTEN      1512/sshd       
tcp6       0      0 ::1:631                 :::*                    LISTEN      2485/cupsd      
tcp6       0      0 :::445                  :::*                    LISTEN      2284/smbd       
tcp6       0      0 :::8888                 :::*                    LISTEN      32491/docker-proxy
tcp6       0      0 :::139                  :::*                    LISTEN      2284/smbd       
tcp6       0      0 :::80                   :::*                    LISTEN      1846/apache2 

我见过的其他帖子似乎是人们根本没有转发jupyter期望使用的端口,但这似乎不是这里的问题。无论使用什么Docker映像(不仅是该特定映像),都会发生这种情况。如果有人对它可能是什么有任何想法或任何调试建议,将不胜感激。

1 个答案:

答案 0 :(得分:0)

解决了问题。

  1. 重新启动主机(请注意,这是自从安装docker以来的第一次重新启动,但是 still 直到...才起作用。)
  2. 运行sudo /etc/init.d/docker restart(在此处浏览https://docs.docker.com/toolbox/faqs/troubleshoot/#configure-http-proxy-settings-on-docker-machines的故障排除文档时,纯粹是出于直觉)。
  3. 然后,已发布的问题中的docker run ...语句有效,现在可以到达主机上的转发端口,并且可以curl的地址。弹出Ubuntu通知,提示“已建立有线连接”。

这是一个la脚的答案,但这对我有用。奇怪的是,似乎有时必须重新运行sudo /etc/init.d/docker restart语句才能打开Docker容器。将尝试弄清这里到底发生了什么,但是如果有更多经验的人认为他们知道可能会发生什么,请告诉我们。