python - Django shell_plus : How to access Jupyter notebook in Docker Container

标签 python django docker-compose jupyter-notebook django-extensions

我正在尝试访问使用 shell_plus 创建的 Jupyter Notebook来自 Docker 容器中 django-extensions 的命令。

docker-compose -f local.yml run --rm django python manage.py shell_plus --notebook

我的配置基于@RobM 和@Mark Chackerian 对此 Stack Overflow question 的回答. IE。我安装并配置了一个自定义内核,我的 Django 应用程序配置文件具有常量 NOTEBOOK_ARGUMENTS设置:
NOTEBOOK_ARGUMENTS = [
    '--ip', '0.0.0.0',
    '--port', '8888',
    '--allow-root',
    '--no-browser',
]

我可以在日志中看到容器成功启动:
[I 12:58:54.877 NotebookApp] The Jupyter Notebook is running at:
[I 12:58:54.877 NotebookApp] http://10d56bab37fc:8888/?token=b2678617ff4dcac7245d236b6302e57ba83a71cb6ea558c6
[I 12:58:54.877 NotebookApp]  or http://127.0.0.1:8888/?token=b2678617ff4dcac7245d236b6302e57ba83a71cb6ea558c6

但是网址打不开。我在我的 docker-compose 中转发了端口 8888 ,尝试使用 localhost而不是 127.0.0.1并且还尝试使用容器 IP 没有成功。

感觉就像我在这里遗漏了明显的东西……感谢任何帮助。

最佳答案

为了 2020 年的记录,我设法拥有了一个工作 django使用 Postgresql 进行设置在 docker-compose :

开发.py (settings.py)

INSTALLED_APPS += [
    "django_extensions",
]

SHELL_PLUS = "ipython"

SHELL_PLUS_PRINT_SQL = True

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

IPYTHON_ARGUMENTS = [
    "--ext",
    "django_extensions.management.notebook_extension",
    "--debug",
]

IPYTHON_KERNEL_DISPLAY_NAME = "Django Shell-Plus"

SHELL_PLUS_POST_IMPORTS = [ # extra things to import in notebook
    ("module1.submodule", ("func1", "func2", "class1", "etc")),
    ("module2.submodule", ("func1", "func2", "class1", "etc"))

]

os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" # only use in development 

要求.txt
django-extensions
jupyter
notebook
Werkzeug  # needed for runserver_plus
...

docker-compose.yml
version: "3"

services:
  db:
    image: postgres:13
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
    restart: always
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data/
  web:
    build: .
    environment:
      - DJANGO_SETTINGS_MODULE=settings.development
    command:
      - scripts/startup.sh
    volumes:
      - ...
    ports:
      - "8000:8000" # webserver 
      - "8888:8888" # ipython notebook
    depends_on:
      - db

volumes:
  postgres_data:

从您的主机终端运行以下命令:
docker-compose exec web python manage.py shell_plus --notebook

最后导航到 http://localhost:8888/?token=<xxxx>在主机的 Web 浏览器中。

关于python - Django shell_plus : How to access Jupyter notebook in Docker Container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62193187/

相关文章:

python - 如何检测边缘上的轮廓或 Blob ?

控制台中的 Python\xYZ 字符

python - Django DateTimeField 说 'You are 5.5 hours ahead of server time.'

python - Django Admin 中一对一字段的过滤结果

docker-compose 成功但服务器在请求时不响应

python - 在nvidia cuda docker中运行python脚本

python - 大型稀疏矩阵及其元数据的理想结构(或可能性)

python - 无法分配 django.utils.functional.SimpleLazyObject,必须是用户实例

Docker compose,在 net :host 中运行容器

docker - 如何完全删除从docker-compose生成的持久服务?