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-alpine,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:
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
你的 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