Использование MongoDB с Docker compose не может аутентифицировать и загружать данные из локальной базы данных - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь использовать MongoDB с Docker compose в Windows powershell (Docker Desktop) со следующими docker-compose.yml:

version: '3.7'
services: 
   mongodb_container:
        image: mongo:latest
        container_name: mongodb
        environment:
            - MONGO_INITDB_ROOT_USERNAME=root
            - MONGO_INITDB_ROOT_PASSWORD=root
            - MONGO_INITDB_DATABASE=test
        ports:
            - 27017:27017
        volumes:
            - mongodb_data_container:/data/db 

volumes:
     mongodb_data_container: 

Когда я пытался аутентифицировать базу данных с помощью docker-compose up -d --build, docker exec -it <container_id> /bin/bash и mongo -u root -p root --authenticationDatabase test, он выдал следующую ошибку с журналом:

MongoDB shell version v4.2.6
connecting to: mongodb://127.0.0.1:27017/?authSource=test&compressors=disabled&gssapiServiceName=mongodb
2020-04-23T14:22:56.890+0000 E  QUERY    [js] Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:341:17
@(connect):2:6
2020-04-23T14:22:56.893+0000 F  -        [main] exception: connect failed
2020-04-23T14:22:56.894+0000 E  -        [main] exiting with code 1

, и когда я попытался загрузить данные из локальной базы данных, запланированной с потоком воздуха, настроенным docker -compose , он выдал ошибку со следующими журналами:

[2020-04-23 14:30:15,763] {taskinstance.py:1128} ERROR - 127.0.0.1:27017: [Errno 111] Connection refused
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/airflow/models/taskinstance.py", line 966, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/lib/python3.5/dist-packages/airflow/operators/python_operator.py", line 113, in execute
    return_value = self.execute_callable()
  File "/usr/local/lib/python3.5/dist-packages/airflow/operators/python_operator.py", line 118, in execute_callable
    return self.python_callable(*self.op_args, **self.op_kwargs)
  File "/usr/local/airflow/dags/missing_title.py", line 32, in download_db
    df =  pd.DataFrame(list(collection3.find())).drop(['_id'], axis=1)
  File "/usr/local/lib/python3.5/dist-packages/pymongo/cursor.py", line 1156, in next
    if len(self.__data) or self._refresh():
  File "/usr/local/lib/python3.5/dist-packages/pymongo/cursor.py", line 1050, in _refresh
    self.__session = self.__collection.database.client._ensure_session()
  File "/usr/local/lib/python3.5/dist-packages/pymongo/mongo_client.py", line 1810, in _ensure_session
    return self.__start_session(True, causal_consistency=False)
  File "/usr/local/lib/python3.5/dist-packages/pymongo/mongo_client.py", line 1763, in __start_session
    server_session = self._get_server_session()
  File "/usr/local/lib/python3.5/dist-packages/pymongo/mongo_client.py", line 1796, in _get_server_session
    return self._topology.get_server_session()
  File "/usr/local/lib/python3.5/dist-packages/pymongo/topology.py", line 485, in get_server_session
    None)
  File "/usr/local/lib/python3.5/dist-packages/pymongo/topology.py", line 209, in _select_servers_loop
    self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: 127.0.0.1:27017: [Errno 111] Connection refused

Как я могу получить доступ к базе данных MongoDB с помощью docker -compose? (Когда я попытался загрузить данные из базы данных MongoDB локально с помощью pymon go и ноутбука Jupiter за пределами docker, я смог)

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Удалите строку:

- MONGO_INITDB_DATABASE=test

из файла компоновки docker и установите для вашей базы данных аутентификации значение admin (по умолчанию)

mongo -u root -p root --authenticationDatabase admin

. проблема.

Для решения второй проблемы настройте соединение на использование имени контейнера, например mongodb:27017 вместо 127.0.0.1:27017

0 голосов
/ 23 апреля 2020

«Отказ в соединении» означает, что у вас ошибка сетевого подключения. Клиент вообще не попадает в аутентификацию. Сначала устраните неполадки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...