Я делаю API генератора вымышленных персонажей. Работает нормально, когда я отправляю запросы через Postman при локальном запуске, но выдает ошибку 500 и время ожидания при запуске через докер. В указанном приложении API фляги:
from flask import Flask, jsonify, request
from flask_restful import Api, Resource
...
class AddCharacter(Resource):
def post(self):
...
p.add_person()
# saves the character to a mongodb
p.save_person() #<-- causes a 500 error in postman when run through docker build and docker up
retJson = {
"Message": "Character has been created",
"Status Code": 200
}
return jsonify(retJson)
Как я подключаюсь к монго:
db = MongoEngine()
app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
'db': 'projectdb',
'host': 'localhost',
'port': 27017
}
with app.app_context():
db.init_app(app)
try:
db_client = db.connection['projectdb']
except ConnectionFailure as e:
sys.stderr.write("Could not connect to MongoDB: %s" % e)
sys.exit(1)
менеджер базы данных:
class DatabaseManager():
def save_user(self, first_name, last_name, openness, conscientiousness, extraversion,
agreeableness, emotional_stability, organization, anxiety,
knowledgeableness, sympathy, talkativeness, accommodation,
expressiveness, carefulness, depressiveness, gregariousness,
altruism, inquisitiveness):
new_user = User(first_name=first_name, last_name=last_name)
new_user.save()
new_personality = Personality(Openness=openness, Conscientiousness=conscientiousness, Extraversion=extraversion,
Agreeableness=agreeableness, EmotionalStability=emotional_stability,
Organization=organization, Anxiety=anxiety,
Knowledgeableness=knowledgeableness, Sympathy=sympathy,
Talkativeness=talkativeness, Accommodation=accommodation,
Expressiveness=expressiveness, Carefulness=carefulness,
Depressiveness=depressiveness, Gregariousness=gregariousness,
Altruism=altruism, Inquisitiveness=inquisitiveness)
new_profile = Profile(person=new_user, personality=new_personality)
new_profile.save()
В классе Человек:
def save_person(self):
dm.save_user(first_name=self.first_name, last_name=self.last_name, openness=aff.Openness,
conscientiousness=aff.Conscientiousness, extraversion=aff.Extraversion,
agreeableness=aff.Agreeableness, emotional_stability=aff.EmotionalStability,
organization=aff.Organization, anxiety=aff.Anxiety,
knowledgeableness=aff.Knowledgeableness, sympathy=aff.Sympathy, talkativeness=aff.Talkativeness,
accommodation=aff.Accommodation,
expressiveness=aff.Expressiveness, carefulness=aff.Carefulness, depressiveness=aff.Depressiveness,
gregariousness=aff.Gregariousness,
altruism=aff.Altruism, inquisitiveness=aff.Inquisitiveness)
файловая структура, Dockerfile, требования.txt, образы файлов .yml. Я запускаю докер с sudo docker-compose build
, а затем sudo docker-compose up
route
изнутри контейнера, чтобы посмотреть таблицу маршрутизации и связать сервер БД с этим IP-адресом, или если вы просто хотите протестировать использование этой машины, только вы можете указать флаг--network="host"
, когда запускаем докер-контейнер. Источник: дополнительная информация 14.06.2020