
profootballfocus/elixir_run本Docker镜像专为运行已编译的Elixir发布版本设计,提供了Elixir应用运行所需的最小化运行时环境。它不包含编译工具链,仅保留必要的Erlang/OTP依赖和运行时组件,旨在减小镜像体积并优化生产环境部署效率。适用于将已通过mix release构建的Elixir应用部署到容器化环境中。
mix release生成的发布包结构,可直接运行已编译应用MIX_ENV=prod mix release <app_name>命令生成Elixir发布包(通常位于_build/prod/rel/<app_name>目录)将已编译的发布包挂载到容器中运行:
bashdocker run -d \ --name elixir-app \ -v /path/to/local/release:/app \ # 挂载本地发布包目录 -e PORT=4000 \ # 设置应用端口 -e DATABASE_URL=ecto://user:pass@db:5432/app \ # 数据库连接配置 elixir-release-runner \ # 镜像名称 /app/bin/<app_name> start # 启动命令(替换<app_name>为实际应用名)
通过Dockerfile将发布包嵌入镜像,避免外部依赖:
dockerfile# 第一阶段:编译Elixir发布包 FROM elixir:1.16-alpine AS builder WORKDIR /app COPY mix.exs mix.lock ./ RUN mix deps.get --only prod COPY . . RUN MIX_ENV=prod mix release my_app # 构建发布包,输出到_build/prod/rel/my_app # 第二阶段:运行环境(使用本镜像) FROM elixir-release-runner WORKDIR /app # 从构建阶段复制发布包到运行镜像 COPY --from=builder /app/_build/prod/rel/my_app ./release # 设置工作目录为发布包目录 WORKDIR /app/release # 启动命令 CMD ["./bin/my_app", "start"]
构建并运行:
bashdocker build -t my-elixir-app . docker run -d -p 4000:4000 --name my-app my-elixir-app
应用可通过环境变量动态配置,常用参数示例:
PORT:应用监听端口(默认可能为4000)DATABASE_URL:数据库连接URL(格式:ecto://user:password@host:port/dbname)SECRET_KEY_BASE:Elixir应用密钥(生产环境必需,通过mix phx.gen.secret生成)LOG_LEVEL:日志级别(如info、warn、error)docker logs -f elixir-appdocker stop elixir-appdocker restart elixir-appdocker exec -it elixir-app shdocker exec -it elixir-app /app/bin/<app_name> eval "MyApp.Release.migrate"HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:$PORT/health || exit 1manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务