Не удалось получить доступ к MongoDB в контейнере через приложение Flask - PullRequest
0 голосов
/ 15 ноября 2018

Так, ребята, ребята, надеюсь, вы поможете мне.

Итак, я сейчас погружаюсь в докер-контейнеры и пытаюсь портировать свое приложение (flask + mongodb) в два отдельных контейнера. Контейнер MongoDB настроен и отлично работает, запуск контейнера mongoexpress со ссылкой дает мне доступ к базе данных, которую я хотел. Теперь я портировал свое приложение Flask, и страница входа в систему загружается нормально (так что сам порт докера) работает, но, хотя я запускаю контейнер со ссылкой на контейнер моей базы данных, я получаю ошибку сервера, когда пытаюсь загрузить контент из базы данных.

Логи дают мне следующую трассировку:

File "/usr/local/lib/python3.7/site-packages/mongoengine/queryset/manager.py", line 37, in __get__
    queryset = queryset_class(owner, owner._get_collection())
File "/usr/local/lib/python3.7/site-packages/mongoengine/document.py", line 190, in _get_collection
    db = cls._get_db()
File "/usr/local/lib/python3.7/site-packages/mongoengine/document.py", line 179, in _get_db
    return get_db(cls._meta.get('db_alias', DEFAULT_CONNECTION_NAME))
File "/usr/local/lib/python3.7/site-packages/mongoengine/connection.py", line 241, in get_db
    db = conn[conn_settings['name']]
File "/usr/local/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1323, in __getitem__
    return database.Database(self, name)
File "/usr/local/lib/python3.7/site-packages/pymongo/database.py", line 107, in __init__
    "of %s" % (string_type.__name__,))
TypeError: name must be an instance of str

Итак, мой Flask-MongoEngine настроен так:

app = Flask(__name__)
app.config["MONGODB_DB"] = 'database-name'
db = MongoEngine(app)

В основном моя база данных должна быть доступна на локальном хосте через стандартный порт 27017. Есть ли что-то, что я должен учитывать при подключении с помощью Flask к контейнеру, или если ссылка еще не открыла порты, как ожидалось? Mongoexpress работает и имеет доступ, поэтому это должно быть проблемой с моей настройкой.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

В конце концов, все оказалось проще, чем я думал. Когда я перенес свой код из Apache2 в Nginx, поток моего кода изменился, и я этого не заметил. Поэтому мои строки конфигурации для Flask просто не назывались.

0 голосов
/ 15 ноября 2018

По крайней мере, укажите это в своих настройках:

app.config['MONGODB_HOST'] = 'mongo'

Причина, по которой ваш mongoexpress работает, заключается в том, что он ищет mongo на хосте с именем mongo по умолчанию, поэтому, когда вы делаете docker run -it --rm -p 8081:8081 --link YOUR_MONGODB_CONTAINER:mongo mongo-express, он может найтисвязанный экземпляр монго.Однако в flask-mongoengine для хоста по умолчанию используется localhost.

...