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

OpenShift部署Spring Boot应用报CreateContainerError mkdir非目录错误

根因定位
  • 触发报错的核心原因是Dockerfile第二阶段的COPY指令存在逻辑歧义:COPY --from=build /cgi/target/dentistapp-1.0.jar /cgi
    • 你使用的openjdk:8基础镜像默认不存在/cgi目录,当COPY指令的目标路径不存在时,系统不会自动将其识别为目录,而是会将源jar包直接重命名为/cgi文件,此时镜像内的/cgi不是目录而是可执行jar包
    • 后续WORKDIR /cgi执行时,kubelet需要为容器初始化工作目录,检测到/cgi是文件不是目录,直接抛出not a directory错误
  • 本地Docker运行正常是因为本地有之前构建的残留镜像层,已经提前创建了/cgi目录,COPY操作会自动将jar包放入该目录,未触发问题;而OpenShift默认采用无缓存的干净构建,所以问题直接暴露。
修复方案

调整Dockerfile第二阶段的写法,消除COPY指令的歧义,同时适配OpenShift的任意UID运行规则即可:

# Build stage
FROM maven:3.6.0-jdk-8-slim AS build
COPY . /cgi
WORKDIR /cgi
RUN mvn install

# Package stage
FROM openjdk:8
# 提前创建目录并设置OpenShift要求的root组权限
RUN mkdir -p /cgi && chgrp -R 0 /cgi && chmod -R g+rwX /cgi
WORKDIR /cgi
ENV HOME /cgi
# 目标路径末尾加斜杠,明确指定是目录
COPY --from=build /cgi/target/dentistapp-1.0.jar /cgi/
EXPOSE 8080
CMD java -jar dentistapp-1.0.jar

修改后重新构建部署即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:03