当试图通过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)