Сервер Jupyter Доступен снаружи, но отказывается от локального соединения - PullRequest
0 голосов
/ 07 сентября 2018

Я настроил сервер ноутбуков Jupyter на компьютере A со следующей конфигурацией:

c.NotebookApp.certfile = '.jupyter/mycert.pem'
c.NotebookApp.ip = 'MY_IP_ADDRESS'
c.NotebookApp.keyfile = '.jupyter/mykey.key'
c.NotebookApp.notebook_dir = 'Dropbox/GitHub'
c.NotebookApp.password = 'MY_HASHED_PASSWORD'
c.NotebookApp.port = 8888

Когда сервер запускается, компьютер B может связаться с этим сервером с помощью https://MY_IP_ADDRESS:8888.

Но Компьютер А никак не мог добраться до самого себя

# ERR_CONNECTION_REFUSED
https://localhost:8888/
https://127.0.0.1:8888/

# ERR_CONNECTION_TIMED_OUT
https://MY_IP_ADDRESS:8888/

Стоит упомянуть, что когда я закомментирую строку, которая присваивает IP-адрес, localhost и 127.0.0.1 работают нормально, но я не смог бы подключиться извне (компьютер B)

Я пробовал переключать порт, переключать браузеры, настраивать /etc/hosts и /etc/resolv.conf и некоторые другие параметры внутри ~/.jupyter/jupyter_notebook_config.py

но, похоже, ни один из них не работает
Любое предложение будет оценено.

Обновление 1

После некоторого дальнейшего расследования выясняется, что это не имеет ничего общего с ноутбуком Jupyter. Я запустил простой Python HTTP-сервер со следующим фрагментом:

import sys
from http.server import SimpleHTTPRequestHandler
import http.server


def test(HandlerClass=SimpleHTTPRequestHandler,
         ServerClass=http.server.HTTPServer):

    protocol = "HTTP/1.0"
    host = 'MY_IP_ADDRESS'
    port = 8888
    if len(sys.argv) > 1:
        arg = sys.argv[1]
        if ':' in arg:
            host, port = arg.split(':')
            port = int(port)
        else:
            try:
                port = int(sys.argv[1])
            except:
                host = sys.argv[1]

    server_address = (host, port)

    HandlerClass.protocol_version = protocol
    httpd = ServerClass(server_address, HandlerClass)

    sa = httpd.socket.getsockname()
    print("Serving HTTP on", sa[0], "port", sa[1], "...")
    httpd.serve_forever()


if __name__ == "__main__":
    test()

Результаты одинаковы. Я предполагаю, что это на самом деле нормальное поведение, но просто не в мою пользу: (

Итак, это приводит к двум обстоятельствам:

  • для самостоятельного подключения

    • привязка IP-адреса: "" (пустая строка)
    • использовать localhost или 127.0.0.1
    • (но другой клиент не сможет подключиться)
  • для другого клиента, подключающегося

    • IP-адрес binging: "MY_IP_ADDRESS"
    • использовать MY_IP_ADDRESS: 8888
    • (но сам сервер не сможет подключиться)

Я добавил новый тег, надеюсь, у кого-нибудь будет подсказка на это> <</p>

...