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

Docker化AdonisJS出现SyntaxError错误求助

问题

我按照Adonis官方教程将AdonisJS容器化,使用基础API启动模板创建项目:

npm init adonisjs@latest hello-world -- --db=mysql --kit=api 

Dockerfile和docker-compose配置与教程一致,仅未使用PostgreSQL和Redis。本地连接Docker中的MariaDB运行项目正常,但通过docker-compose启动时出现以下语法错误:

file:///home/node/app/ace.js:22
import { register } from 'node:module'
         ^^^^^^^^
SyntaxError: The requested module 'node:module' does not provide an export named 'register'
    at ModuleJob._instantiate (node:internal/modules/esm/module_job:124:21)
    at async ModuleJob.run (node:internal/modules/esm/module_job:181:5)
    at async Promise.all (index 0)
    at async ESMLoader.import (node:internal/modules/esm/loader:281:24)
    at async loadESM (node:internal/process/esm_loader:88:5)
    at async handleMainPromise (node:internal/modules/run_main:65:12)

我的docker-compose.yml配置:

services:
  mariadb:
    image: mariadb:10.6
    container_name: mariadb
    volumes:
      - "._mysql_data_dir/:/var/lib/mysql"
    ports:
      - "3306:3306"
    environment:
      - MARIADB_USER=xxx
      - MARIADB_PASSWORD=xxx
      - MARIADB_DATABASE=xxx
      - MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true
    restart: always

  adonis_app:
    container_name: adonis_app
    restart: always
    build:
      context: .
      target: dependencies
    ports:
      - ${PORT}:${PORT}
      - 9229:9229
    env_file:
      - .env
    volumes:
      - ./:/home/node/app
      # Uncomment the below line if you developing on MacOS
      #- /home/node/app/node_modules
    command: dumb-init node ace serve --watch --node-args="--inspect=0.0.0.0"

Dockerfile配置:

ARG NODE_IMAGE=node:16.13.1-alpine

FROM $NODE_IMAGE AS base
RUN apk --no-cache add dumb-init
RUN mkdir -p /home/node/app && chown node:node /home/node/app
WORKDIR /home/node/app
USER node
RUN mkdir tmp

FROM base AS dependencies
COPY --chown=node:node ./package*.json ./
RUN npm ci
COPY --chown=node:node . .

FROM dependencies AS build
RUN node ace build --production

FROM base AS production
ENV NODE_ENV=production
ENV PORT=$PORT
ENV HOST=0.0.0.0
COPY --chown=node:node ./package*.json ./
RUN npm ci --production
COPY --chown=node:node --from=build /home/node/app/build .
EXPOSE $PORT
CMD [ "dumb-init", "node", "server.js" ]

本地Node版本为v21.6.1,在Ubuntu 22.04和Windows 10系统中均出现该错误,请问我遗漏了什么配置?

解决方案

错误核心原因是容器内Node.js版本过低:你本地使用Node.js 21.6.1,但Dockerfile指定的镜像版本是node:16.13.1-alpine,而node:module模块的register导出是Node.js 18.6.0及以上版本才引入的特性,Node.js 16.x完全不支持该API,因此启动时抛出语法错误。

解决步骤如下:

  1. 升级Dockerfile中的Node镜像版本
    修改Dockerfile开头的ARG NODE_IMAGE为支持register API的版本,推荐使用长期支持(LTS)版本,比如Node.js 20.x:

    ARG NODE_IMAGE=node:20.10.0-alpine
    
  2. 重新构建容器镜像并启动服务
    执行以下命令清理旧镜像、重新构建并启动:

    docker-compose down
    docker-compose build --no-cache
    docker-compose up
    
  3. 可选:同步本地与容器的Node版本
    为避免后续依赖安装出现兼容性问题,建议本地也使用和容器一致的LTS版本(比如Node.js 20.x),可通过nvm等版本管理工具切换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:07:02