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

为何Node.js的bcrypt包在Docker中触发Exec format错误,其他包却正常?

bcrypt与Docker的Exec format错误疑问

我已经查阅了node.bcrypt.js仓库中关于构建Docker镜像出错的相关讨论,以及Stack Overflow上“Docker失败 - bcrypt_lib.node: Exec format错误”的主题,里面给出的解决方案都没能让我满意,而且我至今搞不懂为什么bcrypt包会引发这个错误。

请勿将node_modules复制到Docker内,这会增加构建时间并避免此类错误发生。

上面这个回复完全没解决我的问题——我安装的其他所有依赖包都能正常运行(清单附在下文),而且这根本不是解决问题,只是绕开问题而已,毕竟根源明明出在bcrypt包上。

于是我自己开始调查,首先就有几个问题想不通:

  • 为什么bcrypt包需要特殊处理?
  • 它到底存在什么问题?
  • 为什么和Docker的兼容性这么差?

docker-compose.yaml

和那个Stack Overflow主题的情况不同,我在本地开发模式下没有使用Dockerfile,而且需要通过FrontServer服务启动Nodemon。

version: "3.5"

services:

  FrontServer:

    image: node:18-alpine
    container_name: Example-Local-FrontServer
    ports: [ "8080:8080" ]

    # [ Theory ] Nodemon will not be found if invoke just "nodemon". See https://linuxpip.org/nodemon-not-found/
    # [ Theory ] About -L flag: https://github.com/remy/nodemon/issues/1802
    command: sh -c "cd var/www/example.com && node_modules/.bin/nodemon -L 03-LocalDevelopmentBuild/FrontServerEntryPoint.js --environment local"

    depends_on: [ Database ]

    volumes:
      - type: bind
        source: .
        target: /var/www/example.com

  Database:

    image: postgres
    container_name: Example-Local-Database
    ports: [ "${DATABASE_PORT}:${DATABASE_PORT}" ]

    environment:

      - "POSTGRES_PASSWORD=${DATABASE_PASSWORD}"

    volumes:
      - DatabaseData:/var/lib/postgresql/data

volumes:
  DatabaseData:
    name: Example-Local-DatabaseData
    driver: local

其他Node.js依赖

和bcrypt不同,以下依赖不会触发Exec format错误:

{
  "private": "true",
  "dependencies": {
    "@yamato-daiwa/es-extensions": "1.7.0-alpha.4",
    "@yamato-daiwa/es-extensions-nodejs": "1.7.0-alpha.4",
    "body-parser": "1.20.2",
    "class-transformer": "0.5.1",
    "class-validator": "0.14.0",
    "cors": "2.8.5",
    "express": "4.18.2",
    "express-handlebars": "7.1.2",
    "jsonwebtoken": "9.0.2",
    "morgan": "1.10.0",
    "multer": "1.4.5-lts.1",
    "passport": "0.6.0",
    "passport-jwt": "4.0.1",
    "pg": "8.11.3",
    "qs": "6.11.2",
    "reflect-metadata": "0.1.13",
    "routing-controllers": "0.10.4",
    "typeorm": "0.3.17"
  }
}

内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:23:22