Синтаксическая ошибка с Erlang 20.2

Я столкнулся с проблемой проводного соединения с Erlang 20.

Я использую rebar3 as prod tar для создания заархивированного файла, и я использую его для создания образа докера на основе erlang:20.2-alpine.

На моем Macbook Pro нормально вызывать bin/app start, но в целевом контейнере докера он говорит мне: erts-9.2/bin/erlexec: line 1: syntax error: unexpected "("

Erlang на моем Macbook Pro:

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)```

person Yuanbo Han    schedule 23.12.2017    source источник
comment
Обратите внимание, что erlexec — это скомпилированная исполняемая программа. Вероятно, вы пытаетесь запустить erlexec, созданный для OS X, в контейнере Linux. Попробуйте проверить, какой файл erlexec находится в контейнере, запустив file <path-to-erlang-install>/erts-9.2/bin/erlexec.   -  person Steve Vinoski    schedule 23.12.2017
comment
Спасибо за совет, я напрямую использую контейнер Alpine для сборки релиза.   -  person Yuanbo Han    schedule 24.12.2017


Ответы (2)


тлдр; Добавьте в свой проект файл .dockerignore, который игнорирует каталог _build.

У меня была эта проблема сегодня. Как упоминал @steve-vinoski в комментариях, это было связано с тем фактом, что я запускал вывод macOS в контейнере, но, как и @yuanbo-han, я тоже собираю выпуск в Dockerfile, поэтому я не мог понять почему это не сработало.

Затем я понял, что у меня есть директива COPY . . в моем Dockerfile, которая собирала вывод с моего Mac, потому что у меня не было .dockerignore. Решение состояло в том, чтобы добавить в корень проекта следующий файл .dockerignore:

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

Я ссылаюсь на docker erlang, использую docker для прямой сборки выпуска и целевого образа.

person Yuanbo Han    schedule 24.12.2017