我使用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帖子和请求。
2条答案
按热度按时间oipij1gg1#
你需要使用
docker-compose exec
在应用程序容器中运行管理命令。你明白了
db
错误,因为主机名无效db
只是docker compose给你的docker网络中的一个东西;您的主机不知道这样一个主机名(而且数据库不会直接暴露给主机,除非您说应该这样)。chy5wohz2#
你可以
docker-compose run
一个新的容器,它与数据库中的模板匹配docker-compose.yml
文件,但使用不同的命令和其他设置。相比之下,这有两个显著的优势
docker-compose exec
. 你只能使用exec
在正在运行的容器上,但是run
创建一个新容器;如果应用程序在运行初始迁移之前无法启动,则需要run
. 一些复杂的设置会执行一些操作,如在入口点脚本中设置环境变量,以及exec
不会看到这些,但是run
威尔。