Docker执行rebar3 new escript报错:无法加载inets依赖
解决Rebar3无法加载inets依赖的问题
问题根源
你使用的elixir:1.14镜像中,Erlang环境是通过asdf安装的精简版本,系统包管理工具(如apt)安装的erlang-inets属于系统自带的Erlang,和镜像中实际使用的Erlang不属于同一环境,因此安装后无法生效。
解决方案
方案1:切换到包含完整Erlang的基础镜像
改用官方完整Erlang镜像作为基础,再安装Elixir,确保Erlang包含所有标准库模块:
# 使用兼容Elixir 1.14的完整Erlang OTP 25镜像 FROM docker.io/erlang:25-alpine # 安装Elixir RUN apk add --no-cache elixir # 初始化Mix和Rebar3 RUN mix local.hex --force RUN mix local.rebar --force # 复制构建产物 COPY --from=builder /app/_build/prod/rel/example /release/example ENTRYPOINT [ "/release/example/bin/example" ]
方案2:在现有镜像中补全Erlang标准库
如果不想切换镜像,可以卸载现有精简版Erlang,改用系统包安装完整版本:
FROM docker.io/elixir:1.14 # 卸载asdf安装的Erlang,安装系统完整Erlang包 RUN apt-get update && apt-get install -y --no-install-recommends erlang-full \ && rm -rf /var/lib/apt/lists/* \ && rm -rf /usr/local/asdf \ && ln -s /usr/bin/erl /usr/local/bin/erl # 初始化Mix和Rebar3 RUN mix local.hex --force RUN mix local.rebar --force # 复制构建产物 COPY --from=builder /app/_build/prod/rel/example /release/example ENTRYPOINT [ "/release/example/bin/example" ]
方案3:修正builder阶段的环境配置
如果错误是在builder阶段执行rebar3 new escript时出现的,需确保builder镜像的Erlang环境包含inets:
# builder阶段 FROM docker.io/elixir:1.14 as builder # 安装Erlang标准库依赖 RUN apt-get update && apt-get install -y --no-install-recommends erlang-inets erlang-dev \ && rm -rf /var/lib/apt/lists/* # 执行rebar3脚本创建命令 RUN rebar3 new escript my_script # 后续构建步骤...
验证方法
容器启动后,进入容器执行以下命令,确认inets模块可用:
erl -s inets start -s init stop
无报错则说明inets模块已正常加载。
内容的提问来源于stack exchange,提问作者MePP
相关产品推荐
相关产品推荐

