Docker Engine、Compose版本与规范适配疑问:attach属性为何报错?
问题原因与解决方法
核心原因:attach属性的位置错误
你遇到的报错是因为attach属性的放置位置不符合Compose规范。attach是services.<service>.build下的子属性,用于控制镜像构建过程中是否附加到构建容器,而非服务根节点的配置项。如果直接将attach: false写在services.activemq层级下,Compose会识别为无效属性,触发报错。
其他可能的触发因素
- 兼容模式强制启用:若系统中设置了
COMPOSE_COMPATIBILITY环境变量(值为1或其他启用状态),Compose会强制使用旧版本规范解析配置,导致新属性无法被识别。 - 文件名或缓存干扰:虽然官方支持
docker-compose.yml和compose.yml两种文件名,但部分场景下旧文件名可能触发传统解析逻辑;另外,Compose的配置缓存也可能导致新属性未被正确识别。
解决步骤
- 修正attach属性位置:将
attach: false移动到build配置块内,示例配置如下:
services: activemq: build: context: ./activemq # 你的构建上下文路径 attach: false # 其他服务配置(如image、ports等)
- 检查并关闭兼容模式:执行
echo $COMPOSE_COMPATIBILITY查看环境变量,若有值则通过unset COMPOSE_COMPATIBILITY(Linux/macOS)或取消对应系统环境变量设置,再重新运行docker compose up。 - 清理缓存并使用推荐文件名:执行
docker compose down -v清理旧容器和缓存,将配置文件重命名为compose.yml(最新规范推荐)后重新部署。
内容的提问来源于stack exchange,提问作者largehadroncollider
相关产品推荐
相关产品推荐

