ubuntu Docker Node.js容器错误尝试运行容器时出现意外令牌“.”

r7knjye2  于 2023-04-05  发布在  Docker
关注(0)|答案(3)|浏览(149)

我目前正在学习Docker,并试图遵循这门课程(https://devopswithdocker.com/part-1/section-6/)来发展我的技能。虽然到目前为止我能够做所有事情,但我仍然坚持这个练习(1.12页):
我已经做了一个Dockerfile来容器化项目(exampel-frontend),通过以下代码遵循read-me文件(https://github.com/docker-hy/material-applications/blob/main/example-frontend/README.md)的说明(实际上我已经写了几乎类似的,但这是可以在这里找到的解决方案:https://github.com/oneiromancy/devops-with-docker

FROM ubuntu:latest

WORKDIR /usr/src

COPY . .

RUN apt-get update && apt-get install -y curl && curl https://deb.nodesource.com/setup_14.x | apt-get install -y nodejs

RUN apt-get install -y npm && npm install && npm run build && npm install -g serve

CMD ["npx", "serve", "-s", "-l", "8080", "build"]

EXPOSE 8080

但是,当我构建并运行容器时:

docker build . -t hello-frontend
docker run -p 8080:8080 hello-frontend

出现以下错误:

file:///usr/local/lib/node_modules/serve/build/main.js:169
      const ipAddress = request.socket.remoteAddress?.replace("::ffff:", "") ?? "unknown";
                                                     ^

SyntaxError: Unexpected token '.'
    at Loader.moduleStrategy (internal/modules/esm/translators.js:133:18)
    at async link (internal/modules/esm/module_job.js:42:21)

你能帮我修复它,因为我需要这个应用程序运行以下练习...
谢谢大家!

quhf5bfb

quhf5bfb1#

与其将映像基于ubuntu:latest并自行安装Node 14.x(该版本将于5月到期),您可能需要考虑将其切换到基于node:lts的映像,该映像已经安装了最新的长期服务Node版本。
然后你可以将你的Dockerfile文件缩减到

FROM node:lts

WORKDIR /usr/src

COPY . .

RUN npm install && npm run build && npm install -g serve

CMD ["npx", "serve", "-s", "-l", "8080", "build"]

EXPOSE 8080

目前,Node的lts版本是版本18。如果您出于某种原因需要运行Node 14,可以使用node:14映像。

ddrv8njm

ddrv8njm2#

您的节点版本低于Node 12.22.9。

语法(?.)

该功能在Node 14中引入。
您需要升级您的Node版本,Node v19当前版本,但Active LTS版本为v18版本https://nodejs.org/en
此链接有助于更新节点版本如何在Ubuntu上安装特定版本的Node?

kupeojn6

kupeojn63#

谢谢大家的回答!帮助我解决所有错误的最终版本是:

FROM node:16  
WORKDIR /usr/src/app  

COPY package*.json ./  

RUN npm install 

COPY . . 

EXPOSE 8080 

RUN npm list 
RUN npm run build && npm install -g serve  

CMD ["npx", "serve", "-s", "-l", "8080", "build"]

我面临的问题主要是因为我的Dockerfile中缺少COPY package*.json ./
我通过添加以下内容了解到这一点:运行npm list
如果有人有同样的问题...

相关问题