You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署LibreTranslate到Heroku遇R10启动超时错误求助

问题

尝试用Docker将基于Python Flask的LibreTranslate应用部署到Heroku时,持续遇到启动超时错误。本地Docker运行完全正常,但部署到Heroku后,应用无法在60秒内绑定到指定端口,触发R10错误。

Heroku错误日志

2024-06-22T01:11:17.161226+00:00 heroku[web.1]: Starting process with command `/bin/sh -c /app/run.sh`
2024-06-22T01:11:17.801391+00:00 app[web.1]: Starting LibreTranslate...
2024-06-22T01:11:17.801440+00:00 app[web.1]: PORT: 59962
2024-06-22T01:11:17.801441+00:00 app[web.1]: Using port: 59962
2024-06-22T01:12:17.387183+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2024-06-22T01:12:17.399589+00:00 heroku[web.1]: Stopping process with SIGKILL
2024-06-22T01:12:17.487780+00:00 heroku[web.1]: Process exited with status 137

Dockerfile

FROM python:3.11.9-slim-bullseye as builder

WORKDIR /app

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qq \
  && apt-get -qqq install --no-install-recommends -y pkg-config gcc g++ \
  && apt-get upgrade --assume-yes \
  && apt-get clean \
  && rm -rf /var/lib/apt

RUN python -m venv venv && ./venv/bin/pip install --no-cache-dir --upgrade pip

COPY . .

# Install package from source code, compile translations
RUN ./venv/bin/pip install Babel==2.12.1 && ./venv/bin/python scripts/compile_locales.py \
  && ./venv/bin/pip install torch==2.0.1 --extra-index-url https://download.pytorch.org/whl/cpu \
  && ./venv/bin/pip install . \
  && ./venv/bin/pip cache purge

FROM python:3.11.9-slim-bullseye

ARG with_models=false
ARG models=""

RUN addgroup --system --gid 1032 libretranslate && adduser --system --uid 1032 libretranslate && mkdir -p /home/libretranslate/.local && chown -R libretranslate:libretranslate /home/libretranslate/.local
USER libretranslate

COPY --from=builder --chown=1032:1032 /app /app
WORKDIR /app

COPY --from=builder --chown=1032:1032 /app/venv/bin/ltmanage /usr/bin/

RUN if [ "$with_models" = "true" ]; then  \
  # initialize the language models
  if [ ! -z "$models" ]; then \
  ./venv/bin/python scripts/install_models.py --load_only_lang_codes "$models";   \
  else \
  ./venv/bin/python scripts/install_models.py;  \
  fi \
  fi

# Set the ENTRYPOINT to ensure that the run.sh script is executed with the correct interpreter
ENTRYPOINT ["/bin/bash", "/app/run.sh"]

run.sh

#!/bin/bash
set -eo pipefail

echo "Starting LibreTranslate..."
echo "PORT: ${PORT}"

./venv/bin/libretranslate --host 0.0.0.0 --port $PORT &> /app/libretranslate.log 2>&1

咨询问题

  1. 绑定到0.0.0.0在Heroku环境中是否不正确?
  2. 如何进一步排查应用无法在规定时间内绑定端口的原因?
  3. Flask或Docker配置是否存在已知问题会导致端口绑定延迟?

解答

1. 绑定到0.0.0.0在Heroku环境中是否不正确?

绑定到0.0.0.0是完全正确的。Heroku容器环境要求应用监听所有网络接口,不能仅绑定本地回环地址(127.0.0.1),否则Heroku的路由层无法访问应用端口。这部分你的配置没有问题。

2. 如何进一步排查应用无法在规定时间内绑定端口的原因?

  • 调整日志输出方式:当前run.sh将所有日志重定向到本地文件,Heroku无法直接获取这些内容。修改启动命令,把日志直接输出到标准输出/错误流,这样就能在Heroku日志中看到LibreTranslate启动的详细过程,比如是否卡在模型加载环节,或者Flask启动是否有报错:
    # 修改run.sh中的启动命令
    ./venv/bin/libretranslate --host 0.0.0.0 --port $PORT
    
  • 确认模型加载时机:如果Docker构建时未设置with_models=true,应用启动时会自动下载模型,这一步在Heroku受限环境中很容易超过60秒。检查部署时是否指定了该参数,或是否限定了加载的模型数量,避免启动时动态下载。
  • 本地模拟Heroku环境测试:在本地设置PORT环境变量,用Docker运行容器,记录启动耗时,同时观察输出,定位是否有耗时过长的步骤。
  • 检查资源限制:Heroku免费/基础容器的CPU、内存资源有限,LibreTranslate加载大模型时可能因资源不足导致启动缓慢。可以尝试升级容器规格,或减少加载的模型数量。

3. Flask或Docker配置是否存在已知问题会导致端口绑定延迟?

  • 模型加载耗时是核心原因:Flask本身启动速度很快,但LibreTranslate在启动Flask前需要加载Torch机器学习模型,这是最可能导致超时的环节——模型加载通常需要大量时间和资源,在Heroku受限环境中容易超过60秒。
  • Docker构建阶段未预加载模型:如果构建时with_models=false,应用启动时会自动下载并加载模型,这一步的耗时极易触发超时。
  • 权限与路径问题:虽然日志显示端口已被识别,但仍需确认libretranslate用户是否有足够权限访问模型文件和执行./venv/bin/libretranslate命令,可临时用root用户测试排除权限问题。

内容的提问来源于stack exchange,提问作者Bassel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:25:21