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

Docker镜像构建成功但运行时出现failed to create shim报错如何解决

问题排查与修复方案

你遇到的启动报错如下:

docker:Error response from daemon:failed to create shim:OCI runtime create failed:runc create failed: unable to start container PATH: unknown

这个报错本质是容器启动时无法找到ENTRYPOINT声明的可执行文件,你的Dockerfile存在多处配置错误,按以下步骤修复即可:

  • 错误1:冗余的FROM指令
    Dockerfile中只有最后一个FROM声明的镜像会作为最终运行的基础镜像,你写的第一行FROM centos:7完全无效,对应层会在构建时被直接丢弃,无特殊需求直接删除该行即可。
  • 错误2:ENTRYPOINT配置不规范
    你使用的是exec格式的入口点声明ENTRYPOINT ["server.sh", "start"],Docker只会在系统PATH环境变量包含的路径下查找server.sh文件,不会自动搜索当前工作目录;同时openjdk:8-jdk-alpine镜像默认工作目录为根目录/,你通过COPY . .拷贝的文件如果没有配置执行权限、路径不匹配,都会触发找不到可执行文件的报错。
  • 错误3:文件拷贝逻辑存在隐患
    COPY . .会将构建上下文目录下的所有文件全量拷贝到镜像内,既会增大镜像体积,也容易造成文件路径混乱。
  • 错误4:跨平台脚本兼容问题
    如果你在Windows环境下编写server.sh,文件默认带DOS换行符,且Alpine镜像默认没有预装bash,如果脚本用bash语法编写、没有指定正确的解释器,也会导致启动失败。

可直接使用的修复后Dockerfile

FROM openjdk:8-jdk-alpine
# 明确指定工作目录,避免文件散落在根目录
WORKDIR /app
# 拷贝项目文件
COPY . .
# 给启动脚本加执行权限,清除Windows换行符;如果脚本依赖bash,放开下面注释安装bash
# RUN apk add --no-cache bash
RUN chmod +x server.sh && sed -i 's/\r$//' server.sh
# 用绝对路径指定入口脚本,避免PATH查找失败
ENTRYPOINT ["/app/server.sh", "start"]
EXPOSE 8080

额外校验步骤

  1. 检查server.sh首行的解释器声明:如果用Alpine自带的shell,首行必须写#!/bin/sh;如果安装了bash,首行写#!/bin/bash,不要写错路径。
  2. 重新构建镜像后再启动容器:
docker build -t image_name .
docker run -d -p 8080:8080 image_name
  1. 如果仍启动失败,执行以下命令直接进入容器内部调试,手动执行启动脚本看具体报错即可快速定位问题:
docker run --rm -it --entrypoint sh image_name
# 进入容器后执行
cd /app && ./server.sh start

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:03:10