Как исправить docker -compose.yml, ошибка при установке Mayan-EDMS с django - PullRequest
1 голос
/ 03 апреля 2020

Я пытаюсь установить образ Mayan-EDMS с приложением Django и базой данных Postgres, используя docker -compose, но каждый раз, я пытаюсь создать docker -compose, используя docker-compose up, это дает Ошибка redis: 5.0-alpine и mayanedms / mayanedms: 3

version: "3"

networks:
  bridge:
    driver: bridge

services:
  app:
    container_name: django
    restart: always
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    environment:
      - DB_NAME=app
      - DB_USER=insights
      - DB_HOST=db
      - DB_PORT=5432
    depends_on:
      - db
    command: >
      sh -c "mkdir -p logs media &&
             python manage.py wait_for_db &&
             python manage.py runserver 0.0.0.0:8000"

   db:
     image: postgres:11.4-alpine
     container_name: postgres
     volumes:
       - postgres_data:/var/lib/postgresql/data/
     environment:
       - POSTGRES_USER=insights
       - POSTGRES_DB=app

   redis:
        command:
          - redis-server
          - --appendonly
          - "no"
          - --databases
          - "2"
          - --maxmemory
          - "100mb"
          - --maxclients
          - "500"
          - --maxmemory-policy
          - "allkeys-lru"
          - --save
          - ""
          - --tcp-backlog
          - "256"
          - --requirepass
          - "${MAYAN_REDIS_PASSWORD:-mayanredispassword}"
        image: redis:5.0-alpine
        networks:
          - bridge
        restart: unless-stopped
        volumes:
          - redis_data:/data




   mayanedms:
     image:  mayanedms/mayanedms:3
     container_name: mayanedms
     restart: unless-stopped
     ports:
       - "80:8000"
     depends_on:
       - db
       - redis
     volumes:
       - mayanedms_data:/var/lib/mayan
     environment: &mayan_env
       MAYAN_CELERY_BROKER_URL: redis://:${MAYAN_REDIS_PASSWORD:-mayanredispassword}@redis:6379/0
       MAYAN_CELERY_RESULT_BACKEND: redis://:${MAYAN_REDIS_PASSWORD:-mayanredispassword}@redis:6379/1
       MAYAN_DATABASES: "{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'${MAYAN_DATABASE_DB:-mayan}','PASSWORD':'${MAYAN_DATABASE_PASSWORD:-mayandbpass}','USER':'${MAYAN_DATABASE_USER:-mayan}','HOST':'postgresql'}}"
       MAYAN_DOCKER_WAIT: "db:5432 redis:6379"
     networks:
       - bridge

   background_tasks:
     restart: always
     container_name: process_tasks
     build:
       context: .
     depends_on:
       - app
       - db
     environment:
       - DB_NAME=app
       - DB_USER=insights
       - DB_HOST=db
       - DB_PORT=5432
     volumes:
       - ./app:/app
     command: >
       sh -c "python manage.py process_tasks --sleep=3 --log-std --traceback"

 volumes:
     postgres_data:
     redis_data:
     mayanedms_data:

спасибо за помощь

1 Ответ

4 голосов
/ 03 апреля 2020

YAML отступ в вашем docker-compose.yml неверен. Файлы YAML полагаются на отступы пробела для определения структуры, но отступ для службы db использует 3 пробела, где app использует 2 пробела - при синтаксическом анализе вашего файла Compo интерпретировать db (3 пробела) как подкомпонент app (2 пробела), как вы делаете:

services:
  app:
    ...
    db:
      ...

Или эквивалент в json:

"services": {
  "app": {
    "db": { 
      ...
    }
  }
}

Где вам нужно:

services:
  app:
    ...
  db:
    ...

Эквивалентен в json:

"services": {
  "app": {
   ...
  },
  "db": { 
    ...
  }
}

Та же проблема для всех других определений служб и с volumes. volumes должен быть элементом верхнего уровня, но с пробелом он считывается подкомпонентом services

...