Kubernetes部署Docker镜像报错:standard_init_linux.go:228 无此文件或目录
解决Kubernetes部署时的
standard_init_linux.go:228执行错误 针对你遇到的部署错误,结合提供的Dockerfile,可从以下几个方向排查解决:
1. 检查脚本的Shebang解释器行
arm.sh脚本的第一行必须指定正确的shell解释器路径,否则容器无法找到执行脚本的程序:
- 确保脚本开头为
#!/bin/bash(Dockerfile中已安装bash),或者兼容Alpine默认shell的#!/bin/sh。 - 若脚本之前使用了错误的路径(比如
#!/usr/bin/bash),Alpine系统中bash实际位于/bin/bash,会导致解释器找不到,触发该错误。
2. 确保脚本具备执行权限
在Dockerfile中COPY arm.sh之后,显式添加执行权限设置(即使后续有chmod -R 777 /opt,显式设置更稳妥):
COPY arm.sh ${MULE_HOME}/bin/ RUN chmod +x ${MULE_HOME}/bin/arm.sh
3. 验证镜像内脚本的存在性与可执行性
构建镜像后,本地先验证镜像是否正常:
# 进入容器交互模式 docker run --rm -it <你的镜像名称> /bin/bash # 在容器内检查脚本位置与权限 cd /opt/mule/bin && ls -l arm.sh # 尝试直接执行脚本,查看具体报错 ./arm.sh
如果本地执行也报错,可直接定位脚本本身的问题,无需先部署到Kubernetes。
4. 排查工作目录与用户权限
Dockerfile中已设置WORKDIR /opt/mule/bin和USER muser,可通过容器内命令确认muser对arm.sh的执行权限:
# 容器内执行 whoami && ls -l ./arm.sh
(chmod -R 777 /opt已覆盖权限,此步骤大概率没问题,但可快速排除权限异常)
内容的提问来源于stack exchange,提问作者Rama
相关产品推荐
相关产品推荐

