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

Docker中如何使用已有镜像内的预装软件包构建新镜像

Docker多阶段复用基础镜像mvn命令不存在解决方案

问题根因定位

核心问题基本出在第一个基础镜像的构建环节本身就没有成功安装maven,常见触发原因如下:

  • Dockerfile 1中使用分号;分隔命令,即使apt update执行失败(Ubuntu 18.04官方源已下线,默认执行apt update会报错),后续apt install仍会继续执行,最终maven实际未安装,你误以为镜像构建成功。
  • 打标签时源镜像名称/版本写错:你构建Dockerfile 1时如果没有指定标签为my_custom_image:1-0,执行docker tag时会自动创建一个空镜像,后续推送的就是没有maven的空镜像。
  • 构建第二个镜像时拉取了本地缓存的旧版本坏镜像,没有拉取远端最新的正确镜像。

完整修复步骤

1. 修正Dockerfile 1写法

替换为支持Ubuntu 18.04的源,使用&&分隔命令保证链路执行失败时直接中断构建,避免静默失败:

FROM ubuntu:18.04
# 替换Ubuntu 18.04可用的归档源
RUN sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list && \
    sed -i 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list && \
    apt update -y && \
    apt upgrade -y && \
    apt install maven -y && \
    # 构建阶段直接验证maven安装,提前暴露问题
    mvn --version

2. 简化构建打标签流程,避免写错版本

直接在构建时指定最终推送的标签,省略二次tag步骤,减少出错概率:

# 注意末尾的.是Dockerfile所在目录,不要漏
docker build -t external/my_custom_image:1.0 .

3. 本地验证基础镜像有效性

推送前先本地启动镜像验证maven是否正常:

docker run --rm external/my_custom_image:1.0 mvn --version

如果命令能正常输出版本号,再执行推送:

docker push external/my_custom_image:1.0

4. 构建第二个镜像时禁用缓存

避免拉取本地旧的坏缓存镜像:

docker build --no-cache -t your-second-image .

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:12:03