You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:31:15