如何使用docker compose访问django manage.py

wyyhbhjk  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(377)

我使用django作为我的web框架。作为一个数据库,我使用postgressql。要启动我的postgres数据库和Web服务器,我使用docker。
当我用docker compose启动服务器和数据库时,一切正常。数据库正确加载到django中,我没有收到任何错误。
但是当我跑步的时候 python3 manange.py makemigrations django抛出一个错误:
无法将主机名“db”转换为地址:名称或服务未知
其中“db”是我的postgres数据库的名称。甚至当服务器和数据库在不同的窗口上运行时也是如此。我发现非常奇怪的是,当我从docker开始时,数据库就被找到了。
如何访问像这样的命令 python3 manage.py [...] ?
例如,我需要创建一个超级用户,但不知道在哪里创建它,因为如果我使用普通的 python3 manage.py createsuperuser 我得到了与上面相同的错误。
启动docker的控制台窗口我也不能使用,因为django服务器在那里运行,只显示传入的http帖子和请求。

oipij1gg

oipij1gg1#

你需要使用 docker-compose exec 在应用程序容器中运行管理命令。

docker-compose exec webcontainernamehere python manage.py makemigrations

你明白了 db 错误,因为主机名无效 db 只是docker compose给你的docker网络中的一个东西;您的主机不知道这样一个主机名(而且数据库不会直接暴露给主机,除非您说应该这样)。

chy5wohz

chy5wohz2#

你可以 docker-compose run 一个新的容器,它与数据库中的模板匹配 docker-compose.yml 文件,但使用不同的命令和其他设置。

docker-compose run djangoapp \
  ./manage.py createsuperuser

相比之下,这有两个显著的优势 docker-compose exec . 你只能使用 exec 在正在运行的容器上,但是 run 创建一个新容器;如果应用程序在运行初始迁移之前无法启动,则需要 run . 一些复杂的设置会执行一些操作,如在入口点脚本中设置环境变量,以及 exec 不会看到这些,但是 run 威尔。

相关问题