Pymongo.errors.ServerSelectionTimeoutError при запуске докерного образа приложения django

Я пытаюсь запустить docker-образ моего приложения Django. Я запускаю образ mongo отдельно из другого контейнера. Нужна помощь в решении следующей ошибки:

pymongo.errors.ServerSelectionTimeoutError: xxx.xxx.xxx.xxx:27017: timed out, Timeout: 30s, Topology Description: <TopologyDescription id: 61aee0f6695286eb954e68ea, topology_type: Single, servers: [<ServerDescription ('xxx.xxx.xxx.xxx', 27017) server_type: Unknown, rtt: None, error=NetworkTimeout('xxx.xxx.xxx.xxx:27017: timed out',)>]>

Я настроил mongo db с помощью djongo,

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'database-name',
        'CLIENT':{
            'username': 'username',
            'password': 'password',
            'host': 'mongodb://xxx.xxx.xxx.xxx:27017/database-name',
            'port': 27017,
            'authSource': 'admin',
            'authMechanism': 'SCRAM-SHA-1'
        }
    }
}

Я также создал пользователя в базе данных mongo с помощью следующей команды;

db = db.getSiblingDB('database-name')

db.createUser({
  user: 'username',
  pwd: 'password',
  roles: [
    {
      role: 'root',
      db: 'admin',
    },
  ],
});

Использование тех же учетных данных при настройке Mongo с Django.

Это мои требования.txt

asgiref==3.4.1
dataclasses==0.8
Django==3.2.9
django-filter==21.1
djangorestframework==3.12.4
djongo==1.3.6
gunicorn==20.0.4
importlib-metadata==4.8.2
Markdown==3.3.6
pymongo==3.12.1
python-dateutil==2.8.2
pytz==2021.3
six==1.16.0
sqlparse==0.2.4
typing_extensions==4.0.0
zipp==3.6.0

Контейнеры Mongo выглядят следующим образом,

CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS                    PORTS                                           NAMES
f479308130bb   mongo-express          "tini -- /docker-ent…"   16 hours ago   Up 16 hours (healthy)     0.0.0.0:9081->8081/tcp, :::9081->8081/tcp       mongo-express
4e6e0e60a473   mongo                  "docker-entrypoint.s…"   16 hours ago   Up 16 hours (unhealthy)   0.0.0.0:27017->27017/tcp, :::27017->27017/tcp   mongodb

Если я пытаюсь получить доступ к mongo db с удаленного сервера, используя пользователя, которого я создал

mongo xxx.xxx.xxx.xxx/database-name -u username

Это позволит мне войти в оболочку mongo.

docker-compose.yml для mongo и mongo-express выглядит следующим образом,

version: "3"
services:
  mongodb:
    image : mongo
    container_name: mongodb
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=pass12345
    volumes:
      - mongodb-data:/data/db
    networks:
      - mongodb_network
    ports:
      - 27017:27017
  
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongo xxx.xxx.x.xx:27017/test
      interval: 30s
      timeout: 10s
      retries: 5
      # start_period: 30s

    restart: unless-stopped
  mongo-express:
    image: mongo-express
    container_name: mongo-express
    environment:
      - ME_CONFIG_MONGODB_SERVER=mongodb
      - ME_CONFIG_MONGODB_ENABLE_ADMIN=true
      - ME_CONFIG_MONGODB_ADMINUSERNAME=root
      - ME_CONFIG_MONGODB_ADMINPASSWORD=pass12345
      - ME_CONFIG_BASICAUTH_USERNAME=admin
      - ME_CONFIG_BASICAUTH_PASSWORD=admin123
    volumes:
      - mongodb-data
    depends_on:
      - mongodb
    networks:
      - mongodb_network
    ports:
      - 8081:8081
    healthcheck:
      test:  wget --quiet --tries=3 --spider http://admin:admin123@xxx.xxx.xx.xxx:9081 || exit 1
      interval: 30s
      timeout: 10s
      retries: 3
    restart: unless-stopped
  
volumes:
  mongodb-data:
    # name: mongodb-data
networks:
  mongodb_network:
    driver: bridge

docker-compose.yml для приложения Django выглядит следующим образом;

version: "3"
services:
  app:
    build: .
    volumes:
      - .:/app
      - static:/static/
      - logs:/logs/
    image: app:api
    container_name: app_container

  nginx:
    build: ./nginx
    volumes:
      - .:/app
      - static:/static/

    ports:
      - "9001:80"
    depends_on:
      - app

volumes:
  static:
  logs:  

Приложение работает нормально при запуске без docker-compose, используя

python manage.py runserver
Вернуться на верх