【问题标题】:While running "docker-compose up" getting Error "ERROR: yaml.scanner.ScannerError: mapping values are not allowed here"运行“docker-compose up”时出现错误“错误:yaml.scanner.ScannerError:此处不允许映射值”
【发布时间】:2019-05-20 07:48:01
【问题描述】:
运行“docker-compose up”时出错
错误:yaml.scanner.ScannerError:此处不允许映射值
在“./docker-compose.yml”中,第 8 行,第 14 列
我的 docker 撰写文件如下;
postgres:
image: postgres:9.4.21
environment:
POSTGRES_USER: myusername
POSTGRES_PASSWORD: myPass
ports:
-'5432:5432'
volumes:
~/.docker-volumes/mobydock/postgresql/data:/var/lib/postgresql/data
redis:
image: redis: 5.0.5
ports:
- '6379:6379'
volumes:
~/.docker-volumes/mobydock/redis/data:/var/lib/redis/data
mobydock:
build: .
command: gunicorn -b 0.0.0.0:8000 --reload --access-logfile - "mobydock.app:create_app()"
environment:
PYTHONUNBUFFERED: true
links:
- postgres
- redis
volumes:
- .:/mobydock
ports:
- '8000:8000'
我已尝试更改卷路径之前的一些标志。
我想用 postgres 和 redis 图像组成 docker 文件。
我是 Docker 的初学者,第一次这样做。
【问题讨论】:
标签:
docker
docker-compose
【解决方案1】:
您的主要问题是 YAML 语法不被尊重 - 如果您是 YAML 新手,您可以在网络上找到大量资源 - 例如:
- 每个映射的缩进必须使用两个空格
- 列出元素(例如卷或端口)时,您必须为列表中的每个元素使用
-
- 当使用带有 YAML 字符的字符串(例如
:)时,最好引用它们(即 image: "redis:5.0.5" 而不是 image: redis: 5.0.5
您还有一些与 docker-compose 语法相关的问题:
-
Volumes 不是一个合适的列表,您最好使用绝对路径而不是相对路径(不要在 Compose 中使用 ~/path),例如:
volumes:
- /home/user/.docker-volumes/mobydock/redis/data:/var/lib/redis/data
-
在您的文件中,image 将被读取为volumes 的一个元素,即您的缩进不正确。而不是使用:
# YAML will interpret image as being under the volume key
volumes:
- /home/user/.docker-volumes/mobydock/redis/data:/var/lib/redis/data
image: [...]
你应该有:
# mind the space indentation !
volumes:
- /home/user/.docker-volumes/mobydock/redis/data:/var/lib/redis/data
image: [...]
大多数其他元素也存在此缩进错误,请检查Docker Compose 语法以了解每个元素的顺序。
您可以使用 YAML Linter,例如 as this one 来帮助解决这些 YAML 语法问题。
【解决方案2】:
postgres:
image: postgres:9.4.21
environment:
POSTGRES_USER: myusername
POSTGRES_PASSWORD: myPass
ports:
-'5432:5432'
volumes:
- ~/.docker-volumes/mobydock/postgresql/data:/var/lib/postgresql/data
redis:
image: redis: 5.0.5
ports:
- '6379:6379'
volumes:
- ~/.docker-volumes/mobydock/redis/data:/var/lib/redis/data
mobydock:
build: .
command: gunicorn -b 0.0.0.0:8000 --reload --access-logfile - "mobydock.app:create_app()"
environment:
PYTHONUNBUFFERED: true
links:
- postgres
- redis
volumes:
- .:/mobydock
ports:
- '8000:8000'
yaml 是缩进敏感的
【解决方案3】:
volumes 是一个列表,所以你应该写:
volumes:
- ~/.docker-volumes/mobydock/redis/data:/var/lib/redis/data
而且你的文件缩进不正确,应该这样写:
postgres:
image: "postgres:9.4.21"
environment:
POSTGRES_USER: myusername
POSTGRES_PASSWORD: myPass
ports:
-'5432:5432'
volumes:
- ~/.docker-volumes/mobydock/postgresql/data:/var/lib/postgresql/data
redis:
image: "redis:5.0.5"
ports:
- '6379:6379'
volumes:
- ~/.docker-volumes/mobydock/redis/data:/var/lib/redis/data
mobydock:
build: .
command: 'gunicorn -b 0.0.0.0:8000 --reload --access-logfile - "mobydock.app:create_app()"'
environment:
PYTHONUNBUFFERED: true
links:
- postgres
- redis
volumes:
- .:/mobydock
ports:
- '8000:8000'