我试图在Windows powershell(Docker Desktop)中将MongoDB与Docker结合使用,并使用以下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
如何使用docker-compose访问MongoDB数据库? (当我尝试在docker外部使用pymongo和Jupiter Notebook从MongoDB数据库本地下载数据时,我可以)
最佳答案
删除行:
- MONGO_INITDB_DATABASE=test
从docker compose文件中,然后将身份验证数据库设置为admin(默认值)
mongo -u root -p root --authenticationDatabase admin
那将解决第一个问题。
对于第二个问题,将连接配置为使用容器名称,例如
mongodb:27017
而不是127.0.0.1:27017
关于python - 将MongoDB与Docker组合使用,无法从本地数据库认证和下载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61389853/