我创建了一个简单的Elixir应用程序,没有Phoenix,我可以在没有Docker的情况下运行它。
当我想使用多阶段构建将应用程序停靠时,我遇到了一个问题
/app/_build/prod/rel/todo_app/releases/0.1.0/../../erts-14.0.2/bin/erl: exec: line 12: /app/_build/prod/rel/todo_app/erts-14.0.2/bin/erlexec: not found
字符串
这里是dockerfile
FROM elixir:1.15.1 as build
ENV MIX_ENV=prod
COPY lib ./lib
COPY mix.exs .
COPY mix.lock .
RUN mix local.hex --force && \
mix local.rebar --force && \
mix deps.get && \
mix release
# Copy the production.env.exs file to the container
COPY config/prod.env.exs config/
# Final stage for the production release
FROM alpine:3.14
RUN apk add --no-cache bash openssl
WORKDIR /app
# Copy the release from the build stage
COPY --from=build . .
# Copy the Erlang runtime files
# COPY --from=build /app/_build/prod/rel/todo_app/erts-* /app/erts/
# Set the environment variables
ENV REPLACE_OS_VARS=true
ENV PORT=80
ENV MIX_ENV=prod
EXPOSE 80
# CMD ["ls", "_build/prod/rel/todo_app/erts-14.0.2/bin"]
CMD ["_build/prod/rel/todo_app/bin/todo_app", "start"]
型
但当我尝试与单阶段,它是工作。
单级dockerfile
FROM elixir:1.15.1 as builder
WORKDIR /app
COPY . .
ENV MIX_ENV=prod
COPY lib ./lib
COPY mix.exs .
COPY mix.lock .
COPY config/prod.env.exs config/
RUN mix local.rebar --force \
&& mix local.hex --force \
&& mix deps.get \
&& mix release
# ---- Application Stage ----
# RUN apk add --no-cache --update bash openssl
CMD ["_build/prod/rel/todo_app/bin/todo_app", "start"]
型
帮助我在我的多级dockerfile中出错了。
1条答案
按热度按时间von4xj4u1#
如果你想在Alpine上跑步,你也应该在Alpine上跑步。
请尝试
FROM elixir:1.15.1-alpine as build
。顺便说一下,hexpm images是more suitable的Elixir开发比官方图像。