微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何dockerize rebar3-erlang 应用程序?

如何解决如何dockerize rebar3-erlang 应用程序?

我在对 rebar3 应用程序进行 dockerizing 时遇到了一些问题。当我尝试运行应用程序(构建后)时,我收到错误 /prod/bin/prod: line 272: /prod/erts-11.2.2.1/bin/erl: not found

这是我的 rebar.config

{plugins,[rebar3_hex]}.
{deps,[
  {cowboy,"2.6.0"},{eredis,"1.3.3"},{hackney,"1.17.4"},{jiffy,"1.0.8"}
]}.

{shell,[
  % {config,"config/sys.config"},{apps,[gmm]}
]}.

{relx,[
    {release,{prod,"0.0.1"},[
        sasl,gmm
    ]}
]}.

{profiles,[{prod,[{relx,[
                {dev_mode,false},{include_erts,true},{include_src,{debug_info,strip}]}]
        }]}.

这是我的 Dockerfile

FROM erlang:23

RUN mkdir /buildroot
workdir /buildroot

copY src src/
copY include include/
copY rebar.config .
RUN rebar3 as prod release

FROM alpine

RUN apk add --no-cache openssl && \
    apk add --no-cache ncurses-libs

copY --from=0 /buildroot/_build/prod/rel/prod /prod

EXPOSE 8080
CMD ["/prod/bin/prod","console"]

您知道问题的根源是什么吗?

解决方法

Erlang 不会编译成二进制文件,您仍然需要 erlang 运行时才能运行应用程序,但您的最终 docker 映像是一个全新的 alpine 安装,没有安装 erlang

,

id docker 容器是基于 debian 的。我怀疑这个错误是因为发布是在 debian 容器上生成的,但在 alpine 容器上执行。从 List<Map<String,Object>> result = jdbcTemplate.queryForList("SELECT * FROM user WHERE id = ?",entry.getValue()); -container 生成发布。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。