[英]How can I connect to a mongoDB cloud cluster from docker container?
我正在开发 django-react 应用程序并使用 mongoDB 集群来存储数据。 当我在不使用 docker 的情况下运行应用程序时,我可以毫无问题地向数据库发出请求。 但是,当我运行 docker 容器(一个用于我的后端,一个用于我的前端)时,我在后端遇到了这个错误:
File "/usr/local/lib/python3.9/site-packages/pymongo/topology.py", line 215, in _select_servers_loop
raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 5f9ece0f7962ee81cb819b63, topology_type: Single, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 111] Connection refused')>]>
我在 mongo_client.py 和 settings.py 中都有 mongodb 主机。 在 settings.py 我有:
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': '<mydb>',
'HOST': 'mongodb+srv://mike:<mypassword>@cluster0.5u0xf.mongodb.net/<mydb>?retryWrites=true&w=majority',
'USER': 'mike',
'PASSWORD': '<mypassword>',
}
}
我的 docker-compose yaml 看起来像:
version: "3.2"
services:
portalbackend:
restart: always
container_name: code
command: bash -c "python manage.py makemigrations &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
build:
context: ./PortalBackend/
dockerfile: Dockerfile
ports:
- "8000:8000"
networks:
- db-net
portal:
restart: always
command : npm start
container_name: front
build:
context: ./portal/
dockerfile: Dockerfile
ports:
- "3000:3000"
stdin_open: true
depends_on:
- portalbackend
networks:
- db-net
networks:
db-net:
driver: bridge
我需要为 mongodb 创建一个容器吗? 我最初尝试使用本地 mongodb 实例进行此操作,但遇到了同样的问题,因此我尝试使用集群进行滚动。 仍然遇到同样的问题。
不,您不需要添加 mongo 容器,因为您的数据库在 Atlas 中。
请参阅我昨天发布的类似问题的回答: Django + Mongo + Docker getting pymongo.errors.ServerSelectionTimeoutError
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.