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

Docker部署Bun+Hono应用时bcrypt/argon2模块缺失问题求助

Bun应用Docker化时@node-rs模块缺失问题修复

问题场景

集成Hono、better-sqlite3和Lucia的Bun应用,本地执行bun run src/index.tsx完全正常,但Docker容器启动时抛出模块缺失错误:

bun-app-1  | error: Cannot find module "@node-rs/argon2-wasm32-wasi" from "/app/node_modules/@node-rs/argon2/index.js"

bun-app-1  | error: Cannot find module "@node-rs/bcrypt-wasm32-wasi" from "/app/node_modules/@node-rs/bcrypt/binding.js"

bun-app-1  | error: Cannot find module "@node-rs/argon2-linux-arm64-gnu" from "/app/node_modules/@node-rs/argon2/index.js"

bun-app-1 exited with code 1

核心原因

@node-rs/argon2和@node-rs/bcrypt是平台架构绑定的原生模块,本地安装时会适配你的主机CPU架构,但Docker容器的运行架构(比如arm64)可能和本地不一致;另外slim版Bun镜像缺少编译、加载这些模块所需的系统依赖。

修复方案

1. 开发环境配置调整

修订Dockerfile.dev

补充安装编译原生模块的依赖,并强制重新安装适配容器架构的包:

# syntax=docker/dockerfile:1
ARG BUN_VERSION=1.0.25-slim
FROM oven/bun:${BUN_VERSION} as base

LABEL fly_launch_runtime="Bun"

WORKDIR /app

ENV NODE_ENV="development"
ENV PORT 3000
EXPOSE $PORT

COPY package.json bun.lockb ./

FROM base AS development

# 安装编译原生模块必须的系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    pkg-config \
    python-is-python3

# 强制安装适配容器架构的依赖,覆盖本地锁文件可能绑定的架构信息
RUN bun install --force
COPY . .
CMD ["bun", "run", "src/index.tsx"]

调整docker-compose.yml

移除本地node_modules的挂载,避免本地主机架构的依赖覆盖容器内的适配版本:

version: '3'
services:
  bun-app:
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
     - 3000:3000
    env_file:
      - ./.env
    # 移除原有/app/node_modules挂载项,确保容器内用自己安装的依赖

2. 生产环境配置优化

修订Dockerfile.prod,确保构建阶段依赖完整,且复制正确的模块文件:

# syntax=docker/dockerfile:1
ARG BUN_VERSION=1.0.25-slim
FROM oven/bun:${BUN_VERSION} as base

LABEL fly_launch_runtime="Bun"

WORKDIR /app
ENV NODE_ENV="production"

FROM base AS build

# 安装编译依赖
RUN apt-get update -qq && \
    apt-get install --no-install-recommends -y build-essential pkg-config python-is-python3

COPY package.json bun.lockb ./
# 强制安装适配容器架构的生产依赖
RUN bun install --ci --force

COPY --link . .

FROM base

COPY --from=build /app /app
ENV PORT 3000
EXPOSE $PORT
CMD ["bun", "run", "src/index.tsx"]

3. 额外排查建议

  • 检查package.json:如果是Lucia通过oslo引入的@node-rs模块,确认oslo版本与Bun、Docker环境兼容
  • 尝试非slim镜像:用oven/bun:1.0.25(非slim)替代slim镜像,避免系统库缺失
  • 重置依赖缓存:本地删除node_modules和bun.lockb后,重新在容器内执行安装,避免锁文件绑定本地架构信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:11:04