运行docker-compose build --no-cache报YAML解析错误如何修复
问题根因
执行docker-compose build --no-cache触发的YAML解析错误,全部来自配置文件格式不规范,具体错误点:
- 顶层键前置多余空格:
version作为顶层配置项必须顶格书写,原配置在version前加了3个多余空格,直接触发第一行的解析异常 - 配置层级归属错误:
webserver、db属于和app平级的服务,全局volumes、全局networks属于和version、services平级的顶层配置,原配置错误将上述内容全部缩进为app服务的子项,完全不符合YAML层级规则 - 缩进量不统一:
app服务下的volumes、networks字段比同层级的working_dir等字段多缩进1个空格,YAML对同层级配置缩进一致性要求极高,空格数差异会直接触发解析失败 - 列表项格式错误:所有网络引用写法为
-app-network,短横线后缺少必填空格,正确格式为- app-network - 注释位置偏移:Nginx服务、MariaDB服务、全局存储卷、全局网络的注释被错误缩进至
app服务内部,导致解析器误判后续配置的归属层级
修正后的完整配置
直接替换原docker-compose.yml全部内容即可:
version: '3' services: #PHP-FPM service app: build: context: . dockerfile: Dockerfile container_name: store restart: unless-stopped tty: true working_dir: /var/www volumes: - ./:/var/www - ./docker-files/php/local.ini:/usr/local/etc/php/conf.d/local.ini networks: - app-network #Nginx service webserver: image: nginx:alpine container_name: store-webserver restart: unless-stopped tty: true ports: - "8100:80" - "8143:443" volumes: - ./:/var/www - ./docker-files/nginx/conf.d:/etc/nginx/conf.d/ networks: - app-network #MariaDB service db: image: mariadb:10.5.6 container_name: store-mariadb restart: unless-stopped tty: true ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: store MYSQL_USER: store MYSQL_PASSWORD: root volumes: - mariadbData:/var/lib/mysql - ./docker-files/mariadb/my.cnf:/etc/mysql/my.cnf networks: - app-network #Volumes volumes: mariadbData: driver: local #Networks networks: app-network: driver: bridge
*注:原配置中Nginx镜像写为nginx-alpine无对应公共官方镜像,已修正为标准镜像名nginx:alpine,如果使用的是自定义本地镜像可自行改回原名称。
替换完成后重新执行构建命令即可正常运行。
内容的提问来源于stack exchange,提问作者AshkingFlawless
相关产品推荐
相关产品推荐

