我在使用 docker-compose 将 django 容器与 postgres 和 mongo 容器链接时遇到问题?我正在尝试使用“docker-compose up”来启动 mongo 和 postgres 容器(因为我需要链接两者)但 django 应用程序仍然无法在默认设置下连接到 mongodb。我的 django-compose.yml 文件内容复制如下:

    db1:
      image: postgres
    db2:
      image: mongo
      ports:
        - "27017:27017"
    web:
      build: .
      command: python manage.py runserver 0.0.0.0:8000
      volumes:
        - .:/code
      ports:
        - "8000:8000"
      links:
        - db1
        - db2

它确实与具有默认设置的 postgres 连接。我也可以在本地 telnet 到 mongodb 端口。尽管如此,我还是在启动 Web 容器时遇到此错误:



PS:我已经在我的本地主机上成功启动了一个 django-postgres 连接的应用程序,但它无法连接到 AWS 实例上的 db。这是我仍然需要解决的另一个问题。

最佳答案

我遇到了类似的问题,但使用了另一个服务(不是 MongoDB)。我不确定我做错了什么,但这是我解决问题的方法:

import os
import mongoengine

MONGODB_HOST = os.environ.get('DB2_PORT_27017_TCP_ADDR', '127.0.0.1')
mongoengine.connect(host=MONGODB_HOST)
  • DB2 是您在 docker-compose.yml 中的服务名称
  • 27017 是暴露服务的端口。
  • More about docker-compose environment variables
  • 我会把它放在我的设置文件中。但是您可以根据您的项目架构自由地将它放在您认为合适的任何地方

  • 更新

    现在,其他服务可以使用与其别名相似的主机名访问 docker-compose 容器。 link documentation:



    这样你就可以像这样连接到 MongoDB:
    import mongoengine
    
    mongoengine.connect(host="db2")
    

    关于django - docker-compose 使用 mongodb 运行 django,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28854468/

    10-16 17:17