docker-compose用mongodb运行django

anu*_*rag 11 django mongodb docker

我使用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
Run Code Online (Sandbox Code Playgroud)

它使用默认设置与postgres连接.我也可以在本地telnet到mongodb端口.仍然,我在启动Web容器时遇到此错误:

在get_connection web_1中输入文件"/usr/local/lib/python2.7/site-packages/mongoengine/connection.py",第124行.引发ConnectionError("无法连接到数据库%s:\n%s"%(别名,e))web_1 | mongoengine.connection.ConnectionError:无法连接到数据库默认值:web_1 | [Errno 111]连接被拒绝

PS:我已成功在我的localhost上启动了一个django-postgres连接应用程序,但它在AWS实例上无法连接到db.这是另一个我仍需要扎根的问题.

Ana*_*ass 6

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

import os
import mongoengine

MONGODB_HOST = os.environ.get('DB2_PORT_27017_TCP_ADDR', '127.0.0.1')
mongoengine.connect(host=MONGODB_HOST)
Run Code Online (Sandbox Code Playgroud)
  • docker-compose.yml中DB2作为您服务的名称
  • 27017 作为暴露服务的端口.
  • 有关docker-compose环境变量的更多信息
  • 我把它放在我的设置文件中.但是根据您的项目架构,您可以自由地将它放在您认为合适的任何位置

UPDATE

现在,使用与其别名类似的主机名,其他服务可以访问docker-compose容器.链接文档:

链接服务的容器可以在与别名相同的主机名上访问,如果未指定别名,则可以访问服务名称.

这样你可以像这样连接到MongoDB:

import mongoengine

mongoengine.connect(host="db2")
Run Code Online (Sandbox Code Playgroud)