英文:
Docker Node.js container error unexpected token '.' when trying to run the container
问题
目前我正在学习Docker,并尝试遵循这个课程(https://devopswithdocker.com/part-1/section-6/)来提升我的技能。
尽管我已经完成了到目前为止的一切,但我在这个练习(页面下方的1.12)卡住了:
我已经创建了一个Dockerfile来将项目(exampel-frontend)容器化,按照自述文件的说明(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)
你能帮助我修复它吗?因为我需要这个应用程序在接下来的练习中运行...
谢谢!
英文:
I am currently learning Docker and trying to follow this course (https://devopswithdocker.com/part-1/section-6/) to develop my skills.
Although I was able to do everything until now, I am stuck on this exercise (1.12 down the page):
I have made a Dockerfile to containerize the project (exampel-frontend) by following the instructions from the read-me file ( https://github.com/docker-hy/material-applications/blob/main/example-frontend/README.md) with the following code (actually I have written almost similar but this is the solution that can be found here: 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
However, when I build and run the container :
docker build . -t hello-frontend
docker run -p 8080:8080 hello-frontend
I get the following error:
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)
Could you help me to fix it as I need this application to be running for the following exercises ...
Thank you!
答案1
得分: 1
你的Node版本低于Node 12.22.9。
语法 (?.)
该功能在Node 14中引入。
你应该升级你的Node版本。当前版本为Node v19,但Active LTS版本是v18,版本链接https://nodejs.org/en
此链接有助于更新Node版本https://stackoverflow.com/questions/16898001/how-to-install-a-specific-version-of-node-on-ubuntu/45726068#45726068
英文:
Your node version is less than Node 12.22.9.
syntax (?.)
That feature was introduced in Node 14.
You should upgrade your version of Node. The current version of Node v19, but Active LTS version is v18 version https://nodejs.org/en
This link is helpful for update node version https://stackoverflow.com/questions/16898001/how-to-install-a-specific-version-of-node-on-ubuntu/45726068#45726068
答案2
得分: 1
不必再以ubuntu:latest
为基础,并手动安装14.x版本的Node(该版本将于五月结束支持),您可以考虑基于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
镜像。
英文:
Instead of basing your image on ubuntu:latest
and installing Node 14.x yourself (which reaches end of life in May), you might want to consider switching to basing it on node:lts
which is an image that already has the latest long-term-service Node version installed.
Then you can cut your Dockerfile down to
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
Currently, the lts
version of Node is version 18. If you, for some reason, need to run Node 14, you can use the node:14
image instead.
答案3
得分: 1
感谢大家的回答!帮助我解决所有错误的最终版本是:
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 ./
这一部分。
我通过添加以下内容发现了这一问题:RUN npm list
如果有人遇到相同的问题...
英文:
Thank you all for your answers! The final version that helped me solve all the errors was :
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"]
The problem I was facing was coming mostly from the fact that COPY package*.json ./
was missing in my Dockerfile.
I found out about it by adding : RUN npm list
In case anyone has the same problem ...
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论