Docker运行报错standard_init_linux.go:228 no such file or directory问题咨询
问题原因与解决方法
核心报错诱因
你遇到的standard_init_linux.go:228: exec user process caused: no such file or directory报错,且未触发entrypoint.sh内的参数校验逻辑,最常见的原因有三类,按优先级排查:
- 脚本换行符格式错误:如果你是在Windows环境下编辑的
entrypoint.sh,文件默认是Windows CRLF换行符格式,Linux系统的bash解释器无法识别该格式,会直接抛出文件不存在的错误,不会执行脚本内的任何代码,和你遇到的现象完全吻合。
解决方法:用编辑器打开entrypoint.sh,将换行符格式修改为Linux LF格式,重新构建镜像即可。 - 构建上下文路径错误:你执行
docker-compose build或者docker build命令时,必须在项目根目录(即Dockerfile、docker-compose.yml、entrypoint.sh三个文件同目录的位置)执行,否则构建过程无法找到根目录下的entrypoint.sh,导致文件没有被复制到镜像内。 - 镜像内文件缺失/权限异常:构建镜像后可以执行以下命令验证文件是否正常存在:
如果输出无该文件,说明COPY步骤执行失败,检查Dockerfile路径配置;如果文件存在但无执行权限,检查docker run --rm --entrypoint bash 你的镜像名 -c "ls -l /app/entrypoint.sh"RUN chmod +x entrypoint.sh步骤是否正常执行。
关于entrypoint.sh存放位置的疑问
不需要将entrypoint.sh放到/bin/Debug/net5.0目录下。你的Dockerfile中已经单独配置了COPY entrypoint.sh ./命令,只要构建上下文根目录存在该文件,就会被独立复制到镜像的/app目录下。
Visual Studio中的「复制到输出目录」属性仅控制本地编译时是否将文件复制到bin输出目录,和Docker构建过程的COPY逻辑无关,不需要修改该配置。
可选优化
可以将entrypoint.sh开头的解释器声明替换为#!/bin/sh,兼容性更强,避免部分精简镜像无bash安装的问题。
内容的提问来源于stack exchange,提问作者JAF
相关产品推荐
相关产品推荐

