无法使用pymongo客户端将Docker中的MongoDB与Flask连接起来

时间:2018-08-27 12:40:16

标签: python mongodb docker flask

我正在尝试将mongodb与我的docker app中的flask应用程序连接。它不起作用。我已经尝试过this link,在Mac上可以使用,但是我在使用Windows。

这是我的docker compose文件

version: '3.4'

services:
  docker_flask_mongo:
    build: .
    ports:
      - '5000:5000'

  mongodb:
    image: mongo:3.4
    ports:
      - '27017:27017'

在python flask应用程序中,我已经尝试过

client = MongoClient(os.environ['DB_PORT_27017_TCP_ADDR'],
            27017)

不起作用。

更新:

完整代码:

import os
from flask import Flask, redirect, url_for, request, render_template
from pymongo import MongoClient

client = MongoClient(os.environ['DB_PORT_27017_TCP_ADDR'],
            27017)
db = client.tododb

app = Flask(__name__)

@app.route('/')
def test_code():
    item_doc = {
        'name': "a" ,
        'description': "b"
    }
    db.tododb.insert_one(item_doc)

    return "done"

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)

完整日志:

  

附加到dockerfolder_mongodb_1,dockerfolder_docker_flask_mongo_1   mongodb_1 | 2018-08-27T13:14:18.349 + 0000我控制   [initandlisten] MongoDB开始:pid = 1端口= 27017 dbpath = / data / db   64位主机= e086871a3aeb mongodb_1 |   2018-08-27T13:14:18.349 + 0000 I CONTROL [initandlisten]数据库版本   v3.4.14 mongodb_1 | 2018-08-27T13:14:18.350 + 0000我控制   [initandlisten] git版本:gghgghg ..............   mongodb_1 | 2018-08-27T13:14:18.350 + 0000我控制   [initandlisten] OpenSSL版本:OpenSSL 1.0.1t 2016年5月3日mongodb_1   | 2018-08-27T13:14:18.350 + 0000我控制了[initandlisten]分配器:   tcmalloc mongodb_1 | 2018-08-27T13:14:18.350 + 0000我   CONTROL [initandlisten]模块:无mongodb_1 |   2018-08-27T13:14:18.350 + 0000 I CONTROL [initandlisten]构建   环境:mongodb_1 | 2018-08-27T13:14:18.350 + 0000我   CONTROL [initandlisten] distmod:debian81 mongodb_1 |   2018-08-27T13:14:18.350 + 0000 I CONTROL [initandlisten] distarch:   x86_64 mongodb_1 | 2018-08-27T13:14:18.350 + 0000我控制   [initandlisten] target_arch:x86_64 mongodb_1 |   2018-08-27T13:14:18.350 + 0000 I CONTROL [initandlisten]选项:{}   mongodb_1 | 2018-08-27T13:14:18.358 + 0000我存储   [initandlisten] mongodb_1 | 2018-08-27T13:14:18.358 + 0000我   存储[initandlisten] **警告:使用XFS文件系统是   强烈建议使用WiredTiger存储引擎mongodb_1
  | 2018-08-27T13:14:18.358 + 0000 I STORAGE [initandlisten] **
  参见http://dochub.mongodb.org/core/prodnotes-filesystem mongodb_1
  | 2018-08-27T13:14:18.359 + 0000 I STORAGE [initandlisten]错误   创建日志目录/ data / db / journal   boost :: filesystem :: create_directory:设备上没有剩余空间:   “ / data / db / journal” mongodb_1 |   2018-08-27T13:14:18.359 + 0000 I STORAGE [initandlisten]中的异常   initAndListen std :: exception:boost :: filesystem :: create_directory:否   设备上剩余的空间:“ / data / db / journal”,终止mongodb_1
  | 2018-08-27T13:14:18.359 + 0000 I NETWORK [initandlisten]关闭:   将关闭监听套接字... mongodb_1 |   2018-08-27T13:14:18.359 + 0000 I NETWORK [initandlisten]删除   套接字文件:/tmp/mongodb-27017.sock mongodb_1 |   2018-08-27T13:14:18.359 + 0000 I NETWORK [initandlisten]关闭:   将刷新diaglog ... mongodb_1 |   2018-08-27T13:14:18.360 + 0000 I CONTROL [initandlisten]现在退出   mongodb_1 | 2018-08-27T13:14:18.360 + 0000我控制   [initandlisten]使用以下代码关闭:100 docker_flask_mongo_1 | *   正在服务的Flask应用“应用”(延迟加载)docker_flask_mongo_1 | *   环境:生产docker_flask_mongo_1 |警告:请勿使用   生产环境中的开发服务器。   docker_flask_mongo_1 |请改用生产WSGI服务器。   docker_flask_mongo_1 | *调试模式:在docker_flask_mongo_1 | *   在http://0.0.0.0:5000/上运行(按CTRL + C退出)   docker_flask_mongo_1 | *使用stat dockerfolder_mongodb_1重新启动   退出,代码为100 docker_flask_mongo_1 | *调试器处于活动状态!   docker_flask_mongo_1 | *调试器PIN:470-553-089

当我转到localhost:5000时,出现以下错误

pymongo.errors.ServerSelectionTimeoutError
pymongo.errors.ServerSelectionTimeoutError: mongodb:27017: [Errno -2] Name or service not known

1 个答案:

答案 0 :(得分:2)

这是解决方案,

我机器上的Docker卷已装满了以前的内容。所以我已经使用docker volume prune

删除了它

在烧瓶代码之后,

client = MongoClient('mongodb://mongodb:27017/')

现在一切正常。