Docker Compose启动报错:version应为映射而非字符串求助
解决docker-compose.yml报错:service 'version' must be a mapping not a string
这个问题我之前也碰到过!核心原因有两个:UTF-8 BOM字节顺序标记和YAML文件的格式/缩进问题,咱们一步步来解决:
1. 移除UTF-8 BOM标记
报错里的是UTF-8文件的BOM(字节顺序标记),docker-compose的YAML解析器不支持带BOM的UTF-8文件——它会把BOM当成version字段名的一部分,所以才会把version错误识别成一个服务名,而非顶层的版本声明。
你可以用常用文本编辑器调整文件编码:
- Notepad++:打开文件后,点击顶部菜单「编码」→ 选择「UTF-8(无BOM)」,然后保存。
- VS Code:点击右下角的编码标识(比如显示「UTF-8 with BOM」),选择「通过编码保存」,再选「UTF-8」即可。
2. 修正YAML文件的缩进和格式
你提供的YAML内容是连在一起的,这不符合YAML严格的缩进要求——虽然在线解析器可能自动容错,但docker-compose对缩进层级要求非常严格。正确的格式应该是这样:
version: '3' services: api: image: testdocker/api container_name: testdocker_api build: context: . ports: - 5000:80 environment: ASPNETCORE_ENVIRONMENT: Production
注意:
services要和version同级(不要缩进)api服务的所有配置项(image、container_name等)要缩进2个或4个空格(保持统一即可)build下的context要再缩进一层
最后验证
修改完编码和格式后,重新运行docker-compose up,应该就能正常启动服务了。
内容的提问来源于stack exchange,提问作者Simsons
相关产品推荐
相关产品推荐

