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,因此启动时抛出语法错误。
解决步骤如下:
升级Dockerfile中的Node镜像版本
修改Dockerfile开头的ARG NODE_IMAGE为支持registerAPI的版本,推荐使用长期支持(LTS)版本,比如Node.js 20.x:ARG NODE_IMAGE=node:20.10.0-alpine重新构建容器镜像并启动服务
执行以下命令清理旧镜像、重新构建并启动:docker-compose down docker-compose build --no-cache docker-compose up可选:同步本地与容器的Node版本
为避免后续依赖安装出现兼容性问题,建议本地也使用和容器一致的LTS版本(比如Node.js 20.x),可通过nvm等版本管理工具切换。
内容的提问来源于stack exchange,提问作者Nexko
相关产品推荐
相关产品推荐

