如何使用 Docker Compose 访问 Django manage.py

Sam*_*uel 4 python django docker docker-compose

我使用 Django 作为我的 Web 框架。我使用 PostgresSQL 作为数据库。为了启动我的 Postgres 数据库和 Web 服务器,我使用 Docker。

当我使用 docker-compose up 启动服务器和数据库时,一切正常。数据库正确加载到 Django 中,我没有收到任何错误。

但是当我运行例如python3 manange.py makemigrationsdjango 时会抛出错误:

无法将主机名“db”转换为地址:名称或服务未知

其中“db”是我的 postgres 数据库的名称。即使服务器和数据库在不同的窗口上运行时也是如此。我觉得很奇怪的是当我启动docker时就找到了数据库。

如何访问诸如 之类的命令python3 manage.py [...]

例如,我需要创建一个超级用户,但不知道在哪里创建它,因为如果我使用普通用户,python3 manage.py createsuperuser我会得到与上面相同的错误。

我也无法使用启动 docker 的控制台窗口,因为 Django 服务器在那里运行并且只显示传入的 http 帖子和请求。

AKX*_*AKX 6

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

docker-compose exec webservicenamehere python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)

(请参阅docker-compose ps或您为 编写的 YAML webservicenamehere。)

您收到该db错误是因为主机名db只是 Docker Compose 为您提供的 Docker 网络中的一个内容;您的主机不知道这样的主机名(并且数据库无论如何都不会直接暴露给主机,除非您说应该这样做)。