构建Elixir伞形应用Docker镜像时esbuild执行报错求助
解决Elixir伞形应用Docker构建时esbuild语法错误问题
问题原因
这个错误本质是esbuild的二进制文件和Docker镜像的CPU架构不兼容。常见触发场景:
- 本地(比如arm64架构的M系列Mac)提前安装了node_modules,直接复制到amd64架构的Docker镜像中
- Docker基础镜像的架构与构建/运行环境不匹配,导致npm安装的esbuild二进制无法执行
解决方案
方案1:在Docker内部完整安装npm依赖
不要把本地的node_modules复制到镜像里,而是在Docker构建流程中重新安装,确保依赖适配镜像架构:
修改Dockerfile相关步骤:
# 复制伞形应用的gpanel app COPY ./apps/gpanel ./apps/gpanel # 进入assets目录安装npm依赖 RUN cd ./apps/gpanel/assets && npm install # 编译资源 RUN mix assets.deploy
方案2:指定Docker镜像架构
如果需要跨架构构建(比如在arm64机器上构建amd64镜像),在基础镜像声明时指定平台:
FROM --platform=linux/amd64 elixir:1.15-alpine # 后续构建步骤...
方案3:改用Elixir官方的esbuild Hex包
放弃npm安装的esbuild,使用Hex仓库的esbuild包,它会自动下载适配当前架构的二进制文件:
- 在
mix.exs的deps中添加:
defp deps do [ {:esbuild, "~> 0.8", runtime: Mix.env() == :dev} ] end
- 修改Dockerfile步骤:
COPY ./apps/gpanel ./apps/gpanel # 安装适配当前架构的esbuild二进制 RUN mix esbuild.install # 编译资源 RUN mix assets.deploy
内容的提问来源于stack exchange,提问作者Roman Bedichevskii
相关产品推荐
相关产品推荐

