簡體   English   中英

Docker + django_extensions + jupyter: OSError: [Errno 99] 無法分配請求的地址

[英]Docker + django_extensions + jupyter: OSError: [Errno 99] Cannot assign requested address

我正在嘗試在包含 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

我能夠弄清楚。 需要使用NOTEBOOK_KERNEL_SPEC_NAMESdjango-extensions傳遞一些額外的筆記本 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

我使用要求tornado==5.1.1 and django-extensions==2.2.3得到了同樣的錯誤。 有一個循環強制port 8888綁定兩次。 它第二次失敗,因為它是第一次綁定。 我想,這應該 go 到 django-extensions 作為一個錯誤。 其他需求。 這是在使用 django 2.2 的 ubuntu 機器上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM