Docker运行Django镜像报错standard_init_linux.go exec format error求助
错误诱因
exec format error本质是系统无法识别待执行文件的格式,结合你提供的场景,大概率是以下两个原因:
- entrypoint.sh脚本使用了Windows平台的CRLF换行符,Linux系统解析脚本首行的
#!/bin/shshebang声明时,会把末尾的\r识别为文件名的一部分,找不到对应的解释器,直接抛出格式错误 - 你的Dockerfile开头多写了一行无效的
#!/bin/bash,Dockerfile不是shell脚本,不需要shebang声明,属于错误写法会干扰构建逻辑
排查解决步骤
- 先删除Dockerfile第一行的
#!/bin/bash冗余声明 - 检查并转换entrypoint.sh的换行符格式:
- 执行命令
cat -A entrypoint.sh,如果每行结尾显示^M$就说明是CRLF换行符 - 执行
sed -i 's/\r$//' entrypoint.sh直接把换行符替换为Linux标准的LF格式,也可以用dos2unix工具转换
- 执行命令
- 完成修改后重新构建镜像再启动即可
- 如果问题还存在,可以临时把Dockerfile中的ENTRYPOINT改为
ENTRYPOINT ["sh", "/app/entrypoint.sh"],强制用sh解释器执行脚本,绕开shebang解析的问题验证
内容的提问来源于stack exchange,提问作者Amr Aly
相关产品推荐
相关产品推荐

