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

Docker Compose构建时忽略Dockerfile部分指令的问题求助

问题根因

你的问题核心是版本兼容bug,并非配置写错:

  1. 你使用的docker-compose 2.6.0版本默认强制开启BuildKit构建引擎,但Unraid自带的docker 19.03.5搭载的是早期实验版BuildKit,二者适配存在严重缺陷,会出现截断读取Dockerfile、不识别基础镜像内置CMD/ENV配置的问题。
  2. 构建日志里的两个细节可以直接佐证:
    • transferring dockerfile: 32B:你贴出的完整Dockerfile大小远超过32字节,说明BuildKit只读到了Dockerfile前32字节的内容,刚好截止到RUN chmod +x /entrypoint.sh这一步,后面的USER、VOLUME、ENV、CMD、EXPOSE指令全未被读取,所以构建只跑5步就结束,所有后续配置全部丢失。
    • transferring context: 35B:你的构建目录里包含entrypoint.sh脚本,正常构建上下文大小不可能只有35字节,进一步证明BuildKit读取文件时出现了截断。
  3. 直接执行docker build正常是因为Docker 19.03.5默认使用传统构建器,不会自动开启BuildKit,所以能完整读取所有文件、执行全部构建步骤。官方nginx镜像报No command specified也是同一个bug导致的:BuildKit没有正确读取基础镜像内预置的CMD配置。
解决方法

按优先级选择即可,不需要在compose文件里重复维护command、environment配置:

  • 临时快速修复:执行构建、启动命令前关闭BuildKit,和原生docker build行为保持一致:
    DOCKER_BUILDKIT=0 docker-compose build --no-cache postgres
    DOCKER_BUILDKIT=0 docker-compose up -d
    
  • 永久修复二选一:
    • 升级Unraid上的Docker版本到20.10及以上,和docker-compose 2.6.0的BuildKit引擎完全适配;
    • 把docker-compose降级到2.4及更早版本,这些版本不会默认强制开启BuildKit,和Docker 19.03.5完全兼容。
  • 额外校验:检查docker-compose.yaml里postgres服务的build配置,确认dockerfile字段指向的是你贴出的完整Dockerfile,避免同目录下存在残缺的同名Dockerfile被优先读取。

内容的提问来源于stack exchange,提问作者david1602

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:57:21