yaml.parser.ParserError:解析块映射时
Posted
技术标签:
【中文标题】yaml.parser.ParserError:解析块映射时【英文标题】:yaml.parser.ParserError: while parsing a block mapping 【发布时间】:2016-11-11 08:18:27 【问题描述】:ERROR: yaml.parser.ParserError: while parsing a block mapping
in "././tmp/statelesscs_compose.yml", line 1, column 1
expected <block end>, but found ':'
in "././tmp/statelesscs_compose.yml", line 4, column 1
docbase installation completed
在执行下面的 yml 文件时,请您建议我如何解决这个问题。
示例用法:
docker-compose -f my.yml up
也让我知道是否有任何格式化 yml 文件的工具,以便我可以轻松修改
我的.yml:
version: '2'
services:
ubuntupgcsstateless:
image: ubuntupgstatelesscsimage
environment:
- EXTERNAL_IP=10.31.86.164
- EXTERNALDB_IP=10.31.86.165
- EXTERNALDB_ADMIN_USER=postgres
- EXTERNALDB_ADMIN_PASSWORD=password
- DOCBASENAME=DocbaseName
hostname:
"ubuntupgcsstateless"
container_name:
"ubuntupgcsstateless"
ports:
- "1689:1689"
- "1690:1690"
- "50000:50000"
- "50001:50001"
- "9080:9080"
- "9082:9082"
volumes:
- DocbaseName_data:/home/dmadmin/dctm/data
- DocbaseName_dba:/home/dmadmin/dctm/dba
- DocbaseName_share:/home/dmadmin/dctm/share
- DocbaseName_dfc:/home/dmadmin/dctm/config
- DocbaseName_xhive_storage:/home/dmadmin/dctm/xhive_storage
- DocbaseName_mdserver:/home/dmadmin/dctm/wildfly9.0.1/server/DctmServer_MethodServer
privileged: true
volumes:
DocbaseName_data:
DocbaseName_dba:
DocbaseName_share:
DocbaseName_dfc:
DocbaseName_xhive_storage:
DocbaseName_mdserver:
【问题讨论】:
此源中没有 YAML 错误。这是您正在解析的确切来源吗?即错误消息中提到的文件statelesscs_compose.yml
?
【参考方案1】:
方法一:
您应该在 notepad++ 中打开您的 docker-compose.yml 文件并启用“显示所有字符”选项,以便您可以查看并纠正空格、制表符缩进问题但如果这对你来说是一项艰巨的工作
方法二:
使用在线 YAML 验证器工具,例如 https://codebeautify.org/yaml-validator使用此验证工具后,我可以在我的“docker-compose.yml”文件中找到问题,我有一些空格、制表符缩进问题
【讨论】:
谢谢!方法2更简单。我也使用类似的方法来解析 json 文件。【参考方案2】:如果空格确实有空格,则您提供的 YAML 不会生成错误。因此,请检查您的 YAML 中是否有 Tab 或其他隐藏字符。
import ruamel.yaml
yaml_str = """\
version: '2'
services:
ubuntupgcsstateless:
image: ubuntupgstatelesscsimage
environment:
- EXTERNAL_IP=10.31.86.164
- EXTERNALDB_IP=10.31.86.165
- EXTERNALDB_ADMIN_USER=postgres
- EXTERNALDB_ADMIN_PASSWORD=password
- DOCBASENAME=DocbaseName
hostname:
"ubuntupgcsstateless"
container_name:
"ubuntupgcsstateless"
ports:
- "1689:1689"
- "1690:1690"
- "50000:50000"
- "50001:50001"
- "9080:9080"
- "9082:9082"
volumes:
- DocbaseName_data:/home/dmadmin/dctm/data
- DocbaseName_dba:/home/dmadmin/dctm/dba
- DocbaseName_share:/home/dmadmin/dctm/share
- DocbaseName_dfc:/home/dmadmin/dctm/config
- DocbaseName_xhive_storage:/home/dmadmin/dctm/xhive_storage
- DocbaseName_mdserver:/home/dmadmin/dctm/wildfly9.0.1/server/DctmServer_MethodServer
privileged: true
volumes:
DocbaseName_data:
DocbaseName_dba:
DocbaseName_share:
DocbaseName_dfc:
DocbaseName_xhive_storage:
DocbaseName_mdserver:
"""
data = ruamel.yaml.round_trip_load(yaml_str)
print(ruamel.yaml.round_trip_dump(data))
尽管 YAML 规范没有要求,您应该一致地使用相同数量的空格缩进映射中的键(您使用 1 和 2 个空格,我推荐两个)以及序列中的元素(再次使用 1和 2 个空格,我建议将 0 用于映射值的序列)。
使用您的Dockerfile
和docker-compose
尝试以下操作:
version: '2'
services:
ubuntupgcsstateless:
image: ubuntupgstatelesscsimage
environment:
- EXTERNAL_IP=10.31.86.164
- EXTERNALDB_IP=10.31.86.165
- EXTERNALDB_ADMIN_USER=postgres
- EXTERNALDB_ADMIN_PASSWORD=password
- DOCBASENAME=DocbaseName
hostname:
"ubuntupgcsstateless"
container_name:
"ubuntupgcsstateless"
ports:
- "1689:1689"
- "1690:1690"
- "50000:50000"
- "50001:50001"
- "9080:9080"
- "9082:9082"
volumes:
- DocbaseName_data:/home/dmadmin/dctm/data
- DocbaseName_dba:/home/dmadmin/dctm/dba
- DocbaseName_share:/home/dmadmin/dctm/share
- DocbaseName_dfc:/home/dmadmin/dctm/config
- DocbaseName_xhive_storage:/home/dmadmin/dctm/xhive_storage
- DocbaseName_mdserver:/home/dmadmin/dctm/wildfly9.0.1/server/DctmServer_MethodServer
privileged: true
volumes:
DocbaseName_data:
DocbaseName_dba:
DocbaseName_share:
DocbaseName_dfc:
DocbaseName_xhive_storage:
DocbaseName_mdserver:
【讨论】:
以上是关于yaml.parser.ParserError:解析块映射时的主要内容,如果未能解决你的问题,请参考以下文章
解决 ERROR: yaml.parser.ParserError: while parsing a block mapping
Docker 问题集锦(21) - 解决 ERROR: yaml.parser.ParserError: while parsing a block mapping