【问题标题】:Can not connect MongoDB with Flask in Docker with pymongo client无法使用 pymongo 客户端在 Docker 中将 MongoDB 与 Flask 连接
【发布时间】:2019-02-02 00:12:07
【问题描述】:

我正在尝试将 mongodb 与 docker 内的烧瓶应用程序连接起来。它不工作。我试过 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 烧瓶应用程序中我已经尝试过这个

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 I CONTROL [initandlisten] 分配器: tcmalloc mongodb_1 | 2018-08-27T13:14:18.350+0000 我 CONTROL [initandlisten] 模块:无 mongodb_1 | 2018-08-27T13:14:18.350+0000 我控制 [initandlisten] 构建 环境:mongodb_1 | 2018-08-27T13:14:18.350+0000 我 控制 [initandlisten] distmod: debian81 mongodb_1 | 2018-08-27T13:14:18.350+0000 我控制 [initandlisten] 分配: 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 我控制 [initandlisten] 选项:{} mongodb_1 | 2018-08-27T13:14:18.358+0000 我存储 [initandlisten] mongodb_1 | 2018-08-27T13:14:18.358+0000 我 STORAGE [initandlisten] ** 警告:使用 XFS 文件系统是 强烈推荐使用 WiredTiger 存储引擎 mongodb_1
| 2018-08-27T13:14:18.358+0000 我存储 [initandlisten] **
见http://dochub.mongodb.org/core/prodnotes-filesystemmongodb_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 我网络 [initandlisten] 关闭: 即将关闭监听套接字... mongodb_1 | 2018-08-27T13:14:18.359+0000 我网络 [initandlisten] 删除 套接字文件:/tmp/mongodb-27017.sock mongodb_1 | 2018-08-27T13:14:18.359+0000 我网络 [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

【问题讨论】:

  • 用mongodb替换os.environ['DB_PORT_27017_TCP_ADDR']
  • 它不起作用,[initandlisten] shutting down with code:100
  • 发布完整日志
  • 日志在那里

标签: python mongodb docker flask


【解决方案1】:

所以这是解决方案,

我机器中的 Docker 卷已满是以前的东西。所以我使用docker volume prune 删除了它

在烧瓶代码之后,

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

现在一切正常。

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2014-03-06
    • 1970-01-01
    • 2015-07-09
    • 2019-09-29
    • 1970-01-01
    相关资源
    最近更新 更多