【问题标题】:Connection refused [Errno 111] when trying to access to MongoDB with Docker尝试使用 Docker 访问 MongoDB 时连接被拒绝 [Errno 111]
【发布时间】:2019-08-02 08:05:10
【问题描述】:

我是 docker 新手,我有一个简单的 Flask 程序,可以将数据从 MongoDB 打印到 HTML 页面。当我使用 Python 执行应用程序时,它就像一个魅力。但是,使用 Docker 我得到了消息:

pymongo.errors.ServerSelectionTimeoutError: 0.0.0.0:27017: [Errno 111] Connection refused

我尝试过改变:

db = MongoClient('mongodb:27017').mydatabase

到其中之一

db = MongoClient('mongodb://mongodb:27017').mydatabase
db = MongoClient('localhost:27017').mydatabase
db = MongoClient('0.0.0.0:27017').mydatabase

没有任何效果。

我的 app.py 文件:

from flask import Flask, render_template
import database.config as db_conf
from base64 import b64encode
from altair import Chart
from pymongo import MongoClient
import os
app = Flask(__name__)
db = MongoClient('mongodb:27017/').mydatabase

@app.route('/', methods=['GET'])
def get_all_images():
    pictures = db.pictures
    output = []
    html_body = "<ul>"
    collection = pictures.find()
    if collection:
        for q in collection:
            html_body += " <li><a href="+q['md5']+">"+q['md5']+"</a></li>"

            output.append({'md5': q['md5'], 'md5': q['md5'], 'height': q['height'], 'width': q['width'],
                           'timestamp': q['timestamp']})
        html_body += "</ul>"
    else:
        html_body = "<p>No images on database</p>"
    return html_body.format()
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

我的 docker-compose.yml 文件:

version: '2'
services:
  app:
    build:
      context: ./
      dockerfile: ./DockerFile
    ports:
     - "5000:5000"
    links:
     - mongo
    depends_on:
     - mongo
    volumes:
     - .:/code
  mongo:
    image: "mongo:latest"
    ports:
     - "27017:27017"
    command: mongod --port 27017 --bind_ip 0.0.0.0

我的 Docker 文件:

FROM python:3.6
WORKDIR /app
COPY . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
CMD ["python", "app.py"]

我在 WINDOWS 10 上执行了我的脚本,使用:

docker-compose build
docker-compose up

【问题讨论】:

    标签: python mongodb docker flask docker-compose


    【解决方案1】:

    根据 Compose 文件,您的 Mongo 主机名为 mongo,而不是 mongodb。试试

    db = MongoClient('mongo:27017/').mydatabase
    

    也许?

    【讨论】:

    猜你喜欢
    • 2019-12-13
    • 2014-09-14
    • 2016-11-12
    • 2020-11-22
    • 2021-06-08
    • 2021-08-23
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多