如何修复我的 docker-compose.yml ,使用 django 安装 Mayan-EDMS 时出错

its*_*yak 2 django postgresql yaml docker docker-compose

我正在尝试使用 docker-compose 安装带有 Django 应用程序和 Postgres 数据库的 Mayan-EDMS 图像,但每次我尝试使用docker-compose up它构建 docker-compose都会出错。

ERROR: yaml.parser.ParserError: while parsing a block mapping
  in "./docker-compose.yml", line 8, column 3
expected <block end>, but found '<block mapping start>'
  in "./docker-compose.yml", line 29, column 4
Run Code Online (Sandbox Code Playgroud)

这是我的 docker-compose.yml docker -compose 包含postgres:11.4-alpineredis:5.0-alpinemayanedms/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:
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

Pie*_* B. 5

你的 YAML 缩进docker-compose.yml是错误的。YAML 文件依赖空间缩进来定义结构,但服务缩进db使用 3 个空格,其中app使用 2 个空格 - 在解析文件时,Compose 将db(3 个空格)解释为(2 个空格)的子组件app,就像您在做的一样:

services:
  app:
    ...
    db:
      ...
Run Code Online (Sandbox Code Playgroud)

或 json 中的等效项:

"services": {
  "app": {
    "db": { 
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

你需要的是:

services:
  app:
    ...
  db:
    ...
Run Code Online (Sandbox Code Playgroud)

等效于 json:

"services": {
  "app": {
   ...
  },
  "db": { 
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

所有其他服务定义和volumes. volumes必须是顶级元素,但有一个空格,它被读取为的子组件services