【问题标题】:How to access Django manage.py with Docker Compose如何使用 Docker Compose 访问 Django manage.py
【发布时间】:2021-07-09 08:01:14
【问题描述】:

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

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

但是当我运行例如python3 manange.py makemigrations django 时会抛出一个错误:

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

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

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

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

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

【问题讨论】:

  • here 可能会有帮助。

标签: python django docker docker-compose


【解决方案1】:

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

docker-compose exec webservicenamehere python manage.py makemigrations

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

您会收到 db 错误,因为主机名 db 只是 Docker Compose 为您提供的 Docker 网络中的一个东西;您的主机不知道这样的主机名(除非您说应该这样做,否则数据库不会直接暴露给主机)。

【讨论】:

  • 很抱歉打扰您。但是我在哪里可以找到我的 Web 容器名称?
  • docker-compose ps
  • @AKX 默认情况下,webcontainernamehere != 服务名。 docker-compose exec 需要服务名称。
  • 我发现它与 docker-compose.yml 中给出的标题相同
【解决方案2】:

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

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

docker-compose exec 相比,这有两个显着的优势。您只能在正在运行的容器上使用exec,但run 会创建一个新容器;如果您的应用程序在运行初始迁移之前无法启动,您需要run。一些复杂的设置会做一些事情,比如在入口点脚本中设置环境变量,exec 不会看到这些,但run 会。

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2017-11-19
    相关资源
    最近更新 更多