Docker + django_extensions + jupyter: OSError: [Errno 99] Cannot assign requested address
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_NAMES
:
为 django-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
我在使用需求 tornado==5.1.1 and django-extensions==2.2.3
时遇到了同样的错误。有一个循环强制 port 8888
绑定两次。第二次失败了,因为第一次绑定了。我想,这应该作为一个错误进入 django-extensions。其他需求。这是在使用 django 2.2 的 ubuntu 机器上。
我正在尝试在包含 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_NAMES
:
django-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
我在使用需求 tornado==5.1.1 and django-extensions==2.2.3
时遇到了同样的错误。有一个循环强制 port 8888
绑定两次。第二次失败了,因为第一次绑定了。我想,这应该作为一个错误进入 django-extensions。其他需求。这是在使用 django 2.2 的 ubuntu 机器上。