Задать вопрос
RabbitRun9
@RabbitRun9

Как подключить базу данных в Докере?

Такой вопрос. Нужно проект Джанго + Монго запустить в докере, в отдельных контейнерах.
Один контейнер - проект с Джанго. Второй контейнер - база Монго. (можно для начала и без volume, просто чтоб конектилась база в контейнеру с джанго и можно было полноценно работать с проектом).
Прописываю в docker-compose и никак не видит джанго базу монго.

в сеттингах база подключена вот так:
DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'HOST': 'mongodb',
        'PORT': 27017,
    }
}


Если кто делал, или есть рабочие готовые примеры, подскажите.
  • Вопрос задан
  • 831 просмотр
Подписаться 1 Простой 14 комментариев
Решения вопроса 1
Grapeoff
@Grapeoff
В чём концепция...?
version: "3.9"
services:
    server:
        container_name: "server"
        build: ./
        ports:
            - "4200:4200"
        depends_on:
            - mongodb
            - elastic
        restart: always
        links:
            - mongodb
            - elastic
        env_file: .env

    mongodb:
        container_name: "mongodb"
        image: mongo:4.4.7-focal
        restart: always
        volumes:
            - mongodb:/data/db
        environment:
            - MONGO_INITDB_ROOT_USERNAME=$MONGODB_ROOT_USER
            - MONGO_INITDB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD
        ports:
            - "27017:27017"
        env_file: .env

    elastic:
        container_name: "elastic"
        image: elasticsearch:7.13.4
        restart: always
        environment:
            - discovery.type=single-node
            - cluster.name=elastic-crm
            - bootstrap.memory_lock=true
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
            - ELASTIC_USERNAME=$ELASTIC_USERNAME
            - ELASTIC_PASSWORD=$ELASTIC_PASSWORD
        ports:
            - "9200:9200"
        volumes:
            - elastic:/usr/share/elasticsearch/data
        env_file: .env
        
volumes:
    mongodb:
    elastic:

Вот пример моего конфига для одного из приложений.

С помощью links присоединяем два этих сервиса к бекенду, а в бекенде вместо localhost используем имя сервиса. Ну и порты тоже указываем правильные.

Соответственно для монги это будет как-то так:

connect("mongodb://mongodb:27017/");
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@spaceatmoon
Необходимо настроить связь между контейнерами. depends_on указывает только на порядок старта контейнеров.
//версия указана?
services:
  mongodb:
    image: mongo:latest
    restart: always
    ports: //порт ещё
      - 27017:27017
    networks:
            - site

  web:
    build: ./src
    restart: always
    command: python src/manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    networks:
            - site

networks:
    site:
        driver: bridge


Внутри контейнера web вы должны обращаться к mongo db не через localhost, а указывая имя контейнера. Docker разрулит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы