Docker构建镜像时遇/bin/sh: zypper: not found错误求助
问题分析与解决
错误核心:你使用的eclipse-temurin:11-jdk-alpine是基于Alpine Linux的镜像,Alpine默认用apk作为包管理器,而zypper是openSUSE/SUSE系列系统的包管理器,容器内自然找不到该命令。
另外还有两个细节问题需要修正:
- 多阶段构建的第一个
FROM maven:3.8.4 AS maven没有被后续阶段引用,属于冗余代码(如果不需要maven构建可直接删除); - 单独的
RUN cd ...指令不会影响后续RUN的工作目录(每个RUN是独立的shell进程),用WORKDIR设置持久化工作目录更可靠。
修正后的Dockerfile
基础版本(仅满足git克隆需求)
# 若不需要maven构建,直接删除此行 # FROM maven:3.8.4 AS maven FROM eclipse-temurin:11-jdk-alpine # 设置持久化工作目录,替代mkdir+cd的组合 WORKDIR $HOME/images/lib/ # 使用Alpine的apk包管理器安装git RUN apk update && apk add --no-cache git # 执行git克隆 RUN git clone MY_GIT_URL
进阶版本(如果需要maven构建+多阶段优化)
如果你的项目需要maven编译,可正确使用多阶段构建减小最终镜像体积:
# 第一阶段:maven构建 FROM maven:3.8.4 AS builder WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src/ ./src/ RUN mvn package -DskipTests # 第二阶段:运行环境 FROM eclipse-temurin:11-jdk-alpine WORKDIR $HOME/images/lib/ RUN apk update && apk add --no-cache git RUN git clone MY_GIT_URL # 从构建阶段复制编译好的jar包 COPY --from=builder /app/target/*.jar ./app.jar
内容的提问来源于stack exchange,提问作者hell_storm2004
相关产品推荐
相关产品推荐

