pymongo.errors.ServerSelectionTimeoutError:本地主机:27017:[Errno 111]连接被拒绝

Ale*_*nov 5 python mongodb django-rest-framework docker docker-compose

我正在尝试将django-rest应用与docker-compose结合使用。当我自己运行它时,python manage.py runserver它运行良好。

如果我尝试使用docker-compose,sudo docker-compose up它也会运行服务器,但是当我在浏览器中打开页面时,会出现错误。

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
Run Code Online (Sandbox Code Playgroud)

我已经有了数据库,所以我只是在使用这行 settings.py

MONGODB_DATABASES = {
    "default": {
        "name": 'api',
        "host": 'localhost',
       "port": 27017
    },
}
Run Code Online (Sandbox Code Playgroud)

这是我的Dockerfile:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY . /code
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

我的docker-compose.yml:

version: '3.0'
services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
  mongo:
    image: mongo
Run Code Online (Sandbox Code Playgroud)

已经尝试过:

Pymongo在27017一直拒绝连接

Nic*_*lay 5

默认情况下,Compose 会为您的应用程序设置一个网络。服务的每个容器都会加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名被它们发现。

根据该docker-compose.yaml文件,可以从容器mongo访问容器,因此应更改为:mongo:27017websettings.py

MONGODB_DATABASES = {
    "default": {
        "name": 'api',
        "host": 'mongo',
       "port": 27017
    },
}
Run Code Online (Sandbox Code Playgroud)