我正在尝试将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
答案 0 :(得分:2)
这是解决方案,
我机器上的Docker卷已装满了以前的内容。所以我已经使用docker volume prune
在烧瓶代码之后,
client = MongoClient('mongodb://mongodb:27017/')
现在一切正常。