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

Dockerfile添加阶段名称时提示仓库未找到问题求助

问题原因与解决方案

你的问题核心在于Docker版本太旧,不支持你用的多阶段构建语法。

为什么会报错?

AS builder这种为构建阶段命名的语法,是Docker在17.05版本才正式引入的多阶段构建特性。而你当前使用的Docker v1.6.2是非常老旧的版本(2015年发布),完全不认识这个语法——它会把sgrio/java-oracle:jdk_8 AS builder整个字符串当成镜像名称去拉取,自然会提示“仓库找不到”。

两种解决办法

1. 升级Docker版本(推荐)

这是最直接的解决方案,升级到17.05或更高版本后,就能正常使用AS builder的语法了。针对Ubuntu 14.04.5 LTS,你可以按照以下步骤操作:

  • 先卸载旧版本:
    sudo apt-get remove docker docker-engine docker.io
    
  • 设置Docker官方软件源:
    sudo apt-get update
    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
  • 安装新版本Docker:
    sudo apt-get update
    sudo apt-get install docker-ce
    

安装完成后,运行docker --version确认版本已经升级,再重新执行docker build就不会报错了。

2. 不升级版本,用旧方式实现类似效果

如果暂时无法升级Docker,你可以拆分构建流程:

  • 第一步,创建一个只包含builder阶段的临时Dockerfile(比如命名为Dockerfile.builder),内容如下:
    FROM sgrio/java-oracle:jdk_8
    # 这里放你原本在builder阶段要执行的构建命令,比如编译代码、打包文件等
    
  • 构建这个临时镜像并运行一个容器:
    sudo docker build -t my-builder -f Dockerfile.builder .
    sudo docker create --name temp-container my-builder
    
  • 将builder阶段生成的文件复制到本地:
    sudo docker cp temp-container:/path/to/built/files ./local-output
    
  • 最后,在你的主Dockerfile里,从基础镜像开始,将本地复制出来的文件COPY进去,完成后续构建。

这种方式虽然能实现需求,但操作繁琐,不如升级Docker版本来得方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:15:36