【问题标题】:Syntax Error With Erlang 20.2Erlang 20.2 的语法错误
【发布时间】:2019-07-25 05:26:28
【问题描述】:

我遇到了 Erlang 20 的有线问题。

我使用rebar3 as prod tar 生成一个存档文件,并使用它来构建基于erlang:20.2-alpine 的docker 映像。

在我的 Macbook Pro 上,可以调用 bin/app start,但在目标 docker 容器上,它告诉我:erts-9.2/bin/erlexec: line 1: syntax error: unexpected "("

我的 Macbook Pro 上的 Erlang:

erl
Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V9.2  (abort with ^G)

目标容器上的 Erlang:

erl
Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V9.2  (abort with ^G)```

【问题讨论】:

  • 请注意,erlexec 是编译后的可执行程序。您可能正在尝试在 Linux 容器中运行为 OS X 构建的 erlexec。尝试通过运行 file <path-to-erlang-install>/erts-9.2/bin/erlexec 来检查容器中 erlexec 的类型。
  • 感谢您的建议,我直接使用Alpine容器构建发布

标签: erlang rebar3


【解决方案1】:

Tldr;将 .dockerignore 文件添加到忽略 _build目录。

我今天遇到了这个问题。就像 cmets 中提到的 @steve-vinoski 一样,它确实与我在容器中运行 macOS 输出的事实有关,但就像 @yuanbo-han 一样,我也在 Dockerfile 中构建版本,所以我想不通找出为什么它不起作用。

然后我意识到,我的 Dockerfile 中有一个 COPY . . 指令,它正在从我的 mac 获取输出,因为我没有 .dockerignore。解决方案是将以下 .dockerignore 文件添加到项目的根目录:

_build/
.elixir_ls/
.git/
.vscode/
deps/
priv/static/
test/
.dockerignore
.env
.formatter.exs
.gitignore
.travis.yml
Dockerfile
README.md

【讨论】:

    【解决方案2】:

    我参考docker erlang,使用docker直接构建release和target镜像。

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 2014-03-19
      • 2015-01-27
      • 2015-09-13
      • 1970-01-01
      • 2015-08-23
      • 2014-06-08
      • 2011-04-06
      • 2015-02-24
      相关资源
      最近更新 更多