【问题标题】:Can not GET and POST data to MongoDB from Flask in Docker无法从 Docker 中的 Flask GET 和 POST 数据到 MongoDB
【发布时间】:2018-12-05 08:56:41
【问题描述】:

我在 docker 中使用 Flask 和 MongoDB。我的日志显示一切正常,但我无法获取和发布数据,即使 localhost:5000 也不起作用。

这是我的 Docker-compose 文件

version: '3.4'
services:
  flask_example:
    build: .
    ports:
      - '5000:5000'
    links:
      - mongodb
  mongodb:
    image: mongo:latest

在我的 Flask 应用中

app.config['MONGO_DBNAME'] = 'restdb'
app.config['MONGO_URI'] = 'mongodb://mongodb:27017/restdb'
mongo = PyMongo(app)

我得到的日志如下:

mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] MongoDB 启动:pid=1 端口=27017 dbpath=/data/db 64位主机=64a180c6c04e mongodb_1 | 2018-06-26T15:06:45.689+0000 I CONTROL [initandlisten] 数据库版本 v3.6.5 mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] git 版本:a20ecd3e3a174162052ff99913bc2ca 9a839d618 mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] OpenSSL 版本:OpenSSL 1.0.1t 2016 年 5 月 3 日 mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] 分配器: tcmalloc mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] 模块:无 mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] 构建 环境:mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] distmod: debian81 mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] 分配: x86_64 mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] target_arch: x86_64 mongodb_1 | 2018-06-26T15:06:45.689+0000 我控制 [initandlisten] 选项:{ 净:{bindIpAll:真}} mongodb_1 | 2018-06-26T15:06:45.690+0000 我存储 [initandlisten] mongodb_1
| 2018-06-26T15:06:45.690+0000 我存储 [initandlisten] ** 警告: 强烈建议使用 XFS 文件系统与 WiredTiger 存储引擎 mongodb_1 | 2018-06-26T15:06:45.690+0000 我 存储 [initandlisten] ** 见 http://dochub.mongodb.org/co re/prodnotes-文件系统 mongodb_1 | 2018-06-26T15:06:45.690+0000 我存储 [initandlisten] 有线老虎打开配置:创建,缓存大小=47 8M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),cache_cursors=false,log =(启用=真,存档=真,路径=日志,压缩器=快照),文件管理器=(关闭空闲时间=100000),统计日志=(等待= 0),verbose=(recovery_progress), mongodb_1 | 2018-06-26T15:06:46.604+0000 I STORAGE [initandlisten] WiredTiger 消息 [1530025606:604056][1:0x7 f9e1d704a00],txn-recover:设置 全局恢复时间戳:0 mongodb_1 | 2018-06-26T15:06:46.662+0000 我控制 [initandlisten] mongodb_1
| 2018-06-26T15:06:46.662+0000 我控制 [initandlisten] ** 警告: 没有为数据库启用访问控制。 mongodb_1 | 2018-06-26T15:06:46.662+0000 我控制 [initandlisten] **
对数据和配置的读写访问不受限制。 mongodb_1 | 2018-06-26T15:06:46.662+0000 我控制 [initandlisten] mongodb_1 | 2018-06-26T15:06:46.663+0000 我 STORAGE [initandlisten] createCollection: admin.system.version with 提供的 UUID:cdebc7d3-958e-43db-b517-bcfdc59e92ce mongodb_1 | 2018-06-26T15:06:46.692+0000 我命令 [initandlisten] 设置 featureCompatibilityVersion 到 3.6 mongodb_1 | 2018-06-26T15:06:46.696+0000 我存储 [initandlisten] createCollection:带有生成的 UUID 的 local.startup_log: 5b6bb532-fde4-4156-bee9-e4bfa0ae55b7 mongodb_1 | 2018-06-26T15:06:46.731+0000 I FTDC [initandlisten] 初始化 用目录捕获全时诊断数据 '/data/db/diagnostic.data' mongodb_1 | 2018-06-26T15:06:46.731+0000 我网络 [initandlisten] 等待 连接端口 27017 mongodb_1 | 2018-06-26T15:06:47.028+0000 I NETWORK [listener] 连接已接受 从 172.28.0.3:46594 #1(现在打开 1 个 c 连接)flask_example_1 | * 服务 Flask 应用程序“app”(延迟加载)flask_example_1 | * 环境:生产flask_example_1 |警告:请勿使用 生产环境中的开发服务器。 mongodb_1 | 2018-06-26T15:06:47.030+0000 I NETWORK [conn1] 收到客户端 来自 172.28.0.3:46594 conn1 的元数据:{驱动程序:{名称:“PyMongo”, 版本:“3.6.1”},操作系统:{类型:“Linux”,名称:“Linux”,架构: “x86_64”,版本:“4.9.87-linuxkit-aufs”},平台:“CPython 3.6.5.final.0" } flask_example_1 | 改为使用生产 WSGI 服务器。flask_example_1 | * 调试模式:在 flask_example_1 | * 在http://127.0.0.1:5000/ 上运行(按 CTRL+C 退出) 烧瓶示例_1 | * 使用 stat mongodb_1 重启 | 2018-06-26T15:06:47.283+0000 I NETWORK [listener] 连接已接受 从 172.28.0.3:46596 #2 (2 c 连接现在打开) mongodb_1 | 2018-06-26T15:06:47.285+0000 I NETWORK [conn2] 收到客户端 来自 172.28.0.3:46596 conn2 的元数据:{驱动程序:{名称:“PyMongo”, 版本:“3.6.1”},操作系统:{类型:“Linux”,名称:“Linux”,架构: “x86_64”,版本:“4.9.87-linuxkit-aufs”},平台:“CPython 3.6.5.final.0" } flask_example_1 | * 调试器处于活动状态!flask_example_1 | * 调试器 PIN:174-151-610

【问题讨论】:

    标签: mongodb docker flask docker-compose


    【解决方案1】:

    解决了

    在生产/d​​ocker中它必须如下

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

    因此没有localhost:5000,而是0.0.0.0:5000

    【讨论】:

      【解决方案2】:

      我在这里看到的是 Flask 和 mongo 分别装在不同的容器中。 我认为您应该使用主机名映射修复链接部分:

      links:
        - mongodb:mongodb
      

      【讨论】:

        猜你喜欢
        • 2015-09-13
        • 1970-01-01
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        • 1970-01-01
        相关资源
        最近更新 更多