在docker撰写中使用MongoDB的连接超时错误



当试图通过Flask应用程序向MongoDB添加数据时,我得到了这个错误。MongoDB和Flask应用程序是我的docker-compose中的服务。

ConnectionError: HTTPConnectionPool(host='127.0.0.0', port=8000): Max retries exceeded with url: /this (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10cd54190>: Failed to establish a new connection: [Errno 60] Operation timed out'))

app.py

import os
from flask import Flask, g
from flask import request
from pymongo import MongoClient

app = Flask(__name__)

@app.route('/this', methods=['POST'])
def this():
db = g.conn.warehouse
clx = db.this
if request.method == 'POST':
data = request.get_json()
print(data)
clx.insert_one(data)

@app.before_request
def before_request():
MONGODB_HOST = 'mongodb'
g.conn = MongoClient(MONGODB_HOST, 27017)

@app.teardown_request
def teardown_request(exception):
g.conn.close()

Dockerfile

FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["python3", "-m" , "flask", "run", "--host=0.0.0.0"]

docker-compose.yml

version: "3.8"
services:
web:
build: .
ports:
- 8000:5000
links:
- mongodb
redis:
image: "redis:alpine"
mongodb:
image: "mongo:latest"
ports:
- 27017:27017
volumes:
- mongo_data:/data/db
volumes:
mongo_data:

flask
pymongo
redis

在笔记本中,我正试图发出这个POST请求

import requests
requests.post('http://127.0.0.0:8000/this', headers={'Content-Type': 'application/json'}, json={'a': 1})

请尝试如下:

  • docker-composer.yml

    version: "3.8"
    services:
    web:
    build: .
    ports:
    - 8000:5000
    links:
    - mongodb
    environment:
    - MONGODB_HOST = mongodb
    redis:
    image: "redis:alpine"
    mongodb:
    image: "mongo:latest"
    hostname: mongodb
    ports:
    - 27017:27017
    volumes:
    - mongo_data:/data/db
    volumes:
    mongo_data:
    
  • app.py

    @app.before_request        
    def before_request():    
    MONGODB_HOST = os.environ('MONGODB_HOST')
    g.conn = MongoClient(MONGODB_HOST, 27017) 
    

最新更新