执行Docker run命令时出现OCI运行时创建失败错误,求排查解决
Docker OCI Runtime Create Failed 问题排查与解决
问题背景
Dockerfile 内容
FROM ubuntu:latest WORKDIR /app COPY gencsv.sh /app/gencsv.sh RUN chmod +x /app/gencsv.sh CMD ["/bin/bash", "/app/gencsv.sh"]
执行的 Docker Run 命令
docker run -dp 9393:9393 -v "$(pwd)/inputFile:/app/inputFile" input 2 8
错误提示
docker: Error response from daemon: OCI runtime create failed
排查与解决方法
1. 参数传递方式错误
Docker Run 命令中,镜像名 input 后的 2 和 8 会直接覆盖 CMD 定义的启动命令,导致容器尝试执行 input 2 8(而非脚本),这是核心问题之一。
解决:
方案一:修改 Dockerfile 使用
ENTRYPOINT
修改后的 Dockerfile:FROM ubuntu:latest WORKDIR /app COPY gencsv.sh /app/gencsv.sh RUN chmod +x /app/gencsv.sh ENTRYPOINT ["/bin/bash", "/app/gencsv.sh"]重新构建镜像:
docker build -t input .再执行原 Run 命令,参数会自动传递给脚本:
docker run -dp 9393:9393 -v "$(pwd)/inputFile:/app/inputFile" input 2 8方案二:不修改 Dockerfile,直接指定完整命令
docker run -dp 9393:9393 -v "$(pwd)/inputFile:/app/inputFile" input /bin/bash /app/gencsv.sh 2 8
2. 挂载的文件/目录异常
-v "$(pwd)/inputFile:/app/inputFile" 中,若宿主机当前目录下不存在 inputFile,Docker 会自动创建一个目录。如果 gencsv.sh 脚本期望读取的是文件,会直接导致脚本执行失败,进而触发 OCI 错误。
解决:
- 若脚本需要读取文件,先在宿主机创建:
touch $(pwd)/inputFile - 若脚本需要目录,创建目录:
mkdir -p $(pwd)/inputFile
3. 脚本本身存在错误
如果 gencsv.sh 有语法错误,或者依赖的工具在 ubuntu 镜像中未安装(比如默认没有 csvkit 这类工具),会导致容器启动失败。
解决:
- 进入容器手动调试脚本:
docker run -it -v "$(pwd)/inputFile:/app/inputFile" input /bin/bash # 手动执行脚本看报错 /app/gencsv.sh 2 8 - 若缺少依赖,在 Dockerfile 中添加安装命令,例如:
重新构建镜像即可。RUN apt-get update && apt-get install -y csvkit
4. 冗余端口映射(非直接错误,但需优化)
从脚本功能看,它是生成 CSV 文件,并没有监听端口,-p 9393:9393 完全多余,可移除避免混淆:
docker run -d -v "$(pwd)/inputFile:/app/inputFile" input 2 8
内容的提问来源于stack exchange,提问作者Ankit Patel
相关产品推荐
相关产品推荐

