【问题标题】:Docker + django_extensions + jupyter: OSError: [Errno 99] Cannot assign requested addressDocker + django_extensions + jupyter: OSError: [Errno 99] 无法分配请求的地址
【发布时间】:2020-09-04 15:32:48
【问题描述】:

我正在尝试在包含 Django 应用程序的容器内设置 jupyter。我正在使用django-extensions 以利用shell_plus 命令。但是,当我运行它时:

docker-compose exec app python manage.py shell_plus --notebook

我收到以下错误:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.8/site-packages/django_extensions/management/commands/shell_plus.py", line 125, in run_from_argv
    return super(Command, self).run_from_argv(argv)
  File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 369, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.8/site-packages/django_extensions/management/utils.py", line 62, in inner
    ret = func(self, *args, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/django_extensions/management/commands/shell_plus.py", line 517, in handle
    shell()
  File "/usr/local/lib/python3.8/site-packages/django_extensions/management/commands/shell_plus.py", line 253, in run_notebook
    app.initialize(notebook_arguments)
  File "<decorator-gen-117>", line 2, in initialize
  File "/usr/local/lib/python3.8/site-packages/traitlets/config/application.py", line 87, in catch_config_error
    return method(app, *args, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/notebook/notebookapp.py", line 1769, in initialize
    self.init_webapp()
  File "/usr/local/lib/python3.8/site-packages/notebook/notebookapp.py", line 1490, in init_webapp
    self.http_server.listen(port, self.ip)
  File "/usr/local/lib/python3.8/site-packages/tornado/tcpserver.py", line 151, in listen
    sockets = bind_sockets(port, address=address)
  File "/usr/local/lib/python3.8/site-packages/tornado/netutil.py", line 174, in bind_sockets
    sock.bind(sockaddr)
OSError: [Errno 99] Cannot assign requested address

【问题讨论】:

    标签: django docker jupyter-notebook django-extensions


    【解决方案1】:

    我在使用要求 tornado==5.1.1 and django-extensions==2.2.3 时遇到了同样的错误。有一个循环强制port 8888 被绑定两次。它第二次失败,因为它是第一次绑定。我想,这应该作为一个错误进入 django-extensions。其他需求。这是在使用 django 2.2 的 ubuntu 机器上。

    【讨论】:

    • 希望,我可以为自己的答案投票。今天发现自己又得救了。 tornado==5.1.1 有问题因为flower==0.9.3 需要tornado&lt;6.0 而转换为5.1.1
    【解决方案2】:

    我能够弄清楚。需要使用NOTEBOOK_KERNEL_SPEC_NAMESdjango-extensions传递一些additional notebook arguments

    NOTEBOOK_ARGUMENTS = [
        "--ip", "0.0.0.0",
        "--port", "8888",
        "--allow-root"
    ]
    

    您还需要将DJANGO_ALLOW_ASYNC_UNSAFE 添加到您的环境变量中,其值为True。否则,在尝试使用 Django ORM 执行查询时会出错。

    另外,请确保在容器中公开端口。就我而言,我使用的是docker-compose.yml,所以它将是:

    ports:
      - 8000:8000
      - 8888:8888 # this is the port at which notebook runs
    

    设置完成后,运行以下命令将像魅力一样工作:

    docker-compose exec app python manage.py shell_plus --notebook
    

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2018-04-27
      • 2021-05-26
      • 2017-09-13
      • 2020-06-06
      • 2017-05-08
      • 2018-01-02
      • 2022-11-09
      相关资源
      最近更新 更多