代码之家  ›  专栏  ›  技术社区  ›  lampShadesDrifter

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

  •  0
  • lampShadesDrifter  · 技术社区  · 7 年前

    尝试在docker图像上使用jupyter笔记本( https://hub.docker.com/r/tensorflow/tensorflow ),但在浏览器中使用端口转发地址时会遇到问题(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 shows检查响应

    ➜  ~ 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 回复  |  直到 7 年前
        1
  •  0
  •   lampShadesDrifter    7 年前

    解决了问题。

    1. 仍然
    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通知弹出说“有线连接已建立”。

    这是一个有点蹩脚的答案,但这是我的工作。奇怪的是,似乎必须重新运行 语句有时用于打开docker容器。我们会尽量弄清楚到底发生了什么,但是如果有更多经验的人认为他们知道可能发生了什么,请告诉我们。

    推荐文章