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

如何修复适配Ubuntu 16.04的Docker镜像?解决exec格式错误

解决Docker运行PocketMine-MP时的exec format error问题

这个错误standard_init_linux.go:185: exec user process caused "exec format error"本质就是镜像里的可执行文件和你的Ubuntu 16.04宿主机CPU架构不兼容,结合你给出的Dockerfile片段,问题出在你指定的POCKETMINE_BINARY是x86_64架构的版本,但你的机器(或Docker运行环境)并非这个架构,或者你跨架构构建镜像时没做适配。

下面是具体的排查和解决步骤:

1. 先确认你的机器CPU架构

在Ubuntu终端执行这条命令,查看自己的CPU架构:

uname -m
  • 如果输出是x86_64:说明你是64位x86机器,可能是二进制包下载错误,或者跨架构构建出了问题
  • 如果输出是armv7l/aarch64:说明你用了ARM架构的机器(比如树莓派),需要替换成对应ARM版本的PocketMine二进制
  • 如果输出是i686:说明你是32位x86机器,需要用32位的PocketMine二进制

2. 针对不同架构修正Dockerfile

情况一:ARM架构机器(如树莓派)

PocketMine提供了专门的ARM架构二进制包,你需要修改ARG POCKETMINE_BINARY的地址,换成对应ARM版本的Jenkins构建链接:

  • ARM 32位(armv7l):使用PHP-7.2-Linux-ARM32的构建产物
  • ARM 64位(aarch64):使用PHP-7.2-Linux-ARM64的构建产物

修改后的Dockerfile片段示例:

# 替换为ARM64版本的下载链接
ARG POCKETMINE_BINARY=https://jenkins.pmmp.io/job/PHP-7.2-Linux-ARM64/lastSuccessfulBuild/artifact/*zip*/archive.zip

情况二:32位x86机器(i686)

需要替换为32位x86版本的PocketMine二进制包链接,确保和你的系统架构匹配。

情况三:跨架构构建镜像

如果你需要在非x86机器上构建x86架构的镜像(比如在ARM机器上构建给x86服务器用的镜像),需要启用Docker的buildx跨架构构建功能:

  1. 安装并启用buildx:
docker buildx install
  1. 创建跨架构构建实例:
docker buildx create --use --name pmmp-builder
  1. 构建时指定目标架构:
docker buildx build --platform linux/amd64 -t your-pmmp-image:latest .

3. 额外检查:确保启动脚本权限正确

有时候即使架构匹配,如果启动脚本没有执行权限,也可能触发类似错误。可以在Dockerfile中添加以下命令,确保启动脚本有权限运行:

# 假设解压后的启动脚本是start.sh,添加执行权限
RUN chmod +x ./start.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:01:57