当前位置: 首页 > news >正文

汉化langfuse踩坑记录--docker卷挂载未生效问题修复及langfuse启动

本次对langfuse项目镜像进行汉化的这个过程中,遇到的主要困难都围绕着一个核心问题:在网络环境不稳定的情况下,如何成功构建一个依赖外部资源和复杂构建流程的 Docker 镜像,并应用代码修改。

一,docker源代码挂载未生效,汉化代码未生效问题。

在更新源代码为汉化版本并挂载到docker容器下后,发现即使挂载卷成功挂载到容器下,前端页面打开后依旧是未更新状态。后续即使清除docker 缓存后重新构建docker容器也依旧为生效。

原因就在于:

Langfuse 的前端应用 (langfuse-web) 是一个 Next.js 应用。Next.js 应用在生产环境中运行时,它提供的是编译和打包后的静态文件和服务器端渲染的页面。这些编译产物 (.next/standalone, .next/static 等) 是在 Docker 镜像的 构建阶段 (builder 阶段的 turbo run build 命令) 生成的。

当首次启动 Langfuse 时,使用的是官方镜像。这个镜像里面包含的是那个时候编译好的前端代码。

后面尝试的 volumes: - ./web/src:/app/web/src 挂载,确实让容器内部的 /app/web/src 目录与宿主机上的源代码目录实时同步了。但是,正在运行的 Next.js 服务器并不会实时监控这个源代码目录的变化,并自动重新编译和加载。 它加载的是它在镜像构建时就打包好的那些静态文件和服务器端逻辑。

所以,容器内 /app/web/src 目录的源代码是更新后的代码,但 langfuse-web 容器中运行的 Next.js 应用程序实例,实际上加载和展示的是位于它**自身内部(在构建时就已打包进去)**的旧的、未汉化的编译产物。

解决方案:

  1. 修改 docker-compose.ymllangfuse-web 服务的 image 指令替换为 build 指令,并指向正确的 Dockerfile 路径(context: ., dockerfile: ./web/Dockerfile)。
  2. 强制重建镜像: 每次修改代码后,执行 docker compose -p langfuse_cn build --no-cache langfuse-web,强制 Docker 重新编译你的修改,并生成新的镜像。
  3. 重新启动服务: docker compose -p langfuse_cn up -d,使用新构建的镜像启动容器。

在这里插入图片描述

二,构建项目过程中的报错记录及排查:

1. 在下载 pnpm@9.5.0 时遇到网络问题错误:
Error when performing the request to https://registry.npmjs.org/pnpm/-/pnpm-9.5.0.tgz

这表明 Docker 容器无法从 npm 官方仓库下载 pnpm 包

解决方法:​​替换 npm 镜像源​​
package.json 是 JavaScript/Node.js 项目的核心配置文件,主要用于管理项目的元数据、依赖关系和脚本命令。
在dockerfile中执行npm run,npm run build等命令时,会从该文件下下载依赖包。
在 Dockerfile 中​​执行 corepack prepare 前​​添加以下命令:

RUN npm config set registry https://registry.npmmirror.com
2.解决 Prisma 二进制下载失败问题(ECONNRESET 错误)

该错误表明在构建过程中 ​​Prisma 引擎二进制文件下载失败​​,核心原因是网络连接被重置(ECONNRESET)。

Error: request to https://binaries.prisma.sh/all_commits/acc0b9dd43eb689cbd20c9470515d719db10d0b0/linux-musl-openssl-3.0.x/query-engine.gz.sha256 failed, reason: read ECONNRESET

使用淘宝镜像源,修改 Dockerfile,在 RUN turbo run build 前添加:

ENV PRISMA_BINARIES_MIRROR="https://npmmirror.com/mirrors/prisma"
RUN NODE_OPTIONS='--max-old-space-size=8192' turbo run build
3.解决国内镜像源下载文件不完整,导致文件后续解压失败问题:

报错日志:

ERROR [langfuse-web runner  7/17] RUN MIGRATE_TARGET_ARCH=$(echo linux/amd64 | sed 's/\//-/g') &&     wget -q -O- https://github.com/golang-migrate/migrate/releases/download/v4.18.2/migrate.$MIGRATE_TARGET_  131.3s

先手动前往官网下载文件,访问 golang-migrate 的 GitHub Releases 页面。
下载:https://github.com/golang-migrate/migrate/releases/download/v4.18.2/migrate.darwin-amd64.tar.gz

下载完成后,将文件保存到dockerfile同级目录下,执行

tar xvzf migrate.$MIGRATE_TARGET_ARCH.tar.gz

然后将web/dockerfile文件中的:

RUN MIGRATE_TARGET_ARCH=$(echo ${TARGETPLATFORM:-linux/amd64} | sed 's/\//-/g') && \wget -q -O- https://ghproxy.com/https://github.com/golang-migrate/migrate/releases/download/v4.18.2/migrate.$MIGRATE_TARGET_ARCH.tar.gz | tar xvz && \mv migrate /usr/bin/migrate

替换为:

COPY web/migrate /usr/bin/migrate
RUN chmod +x /usr/bin/migrate
4. ​​使用国内镜像源(推荐)​​
# 在RUN turbo run build前添加
ENV PRISMA_BINARIES_MIRROR="https://npmmirror.com/mirrors/prisma"
RUN NODE_OPTIONS='--max-old-space-size=8192' turbo run build --filter=web...
5. 通过源代码构建容器

注意每次构建前清理缓存避免干扰:

docker builder prune -af
docker build --no-cache .
http://www.xdnf.cn/news/1004887.html

相关文章:

  • 基于 SpringBoot + Vue 在线点餐系统(前后端分离)
  • javascript入门
  • LangGraph--搭建官方机器人聊天(带工具的)教程
  • vue 导航 + router-view 局部刷新
  • AI技术专题:电商AI专题
  • java使用aspose读取word里的图片
  • YOLOv8 模块添加与修改讲解:从源码修改到配置文件配置
  • Nacos服务注册失败解决方案
  • pysnmp 操作流程和模块交互关系的可视化总结
  • JVM深度解析:执行引擎、性能调优与故障诊断完全指南
  • 【Python从入门到精通】--pycharm虚拟环境详解
  • 深度解析关键词价值,实现精准流量匹配
  • SpringBoot解决下载接口文件名中文乱码问题的3种方法
  • Bash (Bourne Again SHell)
  • Ftrace 调试 Rockchip MIPI D-PHY 驱动步骤
  • 明远智睿SD2351核心板:边缘计算时代的工业级核心引擎深度解析
  • 深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(3)
  • DEVICENET转MODBUS TCP网关连接DeviceNet数字远程IO模块配置案例
  • 解决新版RN 热更新报错:recreateReactContextInBackground
  • Unity Mecanim C# 动画切换实践:实现随机播放待机动画
  • 网络安全:OWASP防护守则
  • Tomcat调优
  • Ntfs!NtfsAllocateRestartTableIndex函数分析和Ntfs!DIRTY_PAGE_ENTRY_V0结构的关系
  • CSS 基础选择器 文字控制属性 综合案例
  • python3.12安装记录
  • 分割任意组织:用于医学图像分割的单样本参考引导免训练自动点提示方法|文献速递-深度学习医疗AI最新文献
  • MCU、MPU、GPU、Soc、DSP、FPGA、CPLD……它们到底是什么?
  • 日本云服务器租用多少钱合适
  • 当卷积作用于信号处理
  • AppInventor2原生进度条组件LinearProgress用法及注意点