Node.js 如何修复Docker意外的操作员错误?

Node.js 如何修复Docker意外的操作员错误?,node.js,docker,google-cloud-run,Node.js,Docker,Google Cloud Run,我是一个超级新手,最近将一个项目从appengine转移到cloudrun。很简单,我很喜欢 但是,现在我正在尝试更新图像(因为我添加了一些新代码)。我知道我需要进入一个实际的容器来更新一个图像(我想是吧?),但是当我尝试docker run时,我得到了一个意外的操作符错误 这让我快疯了 我无法启动容器。我无法编辑我的图像。我无法在Cloud Run上上载新版本 据我所知,Dockerfile必须处理一个意外的运算符错误。所以,这里是我的Dockerfile(由Google提供,用于在云上部署映

我是一个超级新手,最近将一个项目从appengine转移到cloudrun。很简单,我很喜欢

但是,现在我正在尝试更新图像(因为我添加了一些新代码)。我知道我需要进入一个实际的容器来更新一个图像(我想是吧?),但是当我尝试
docker run
时,我得到了一个
意外的操作符
错误

这让我快疯了

我无法启动容器。我无法编辑我的图像。我无法在Cloud Run上上载新版本

据我所知,Dockerfile必须处理一个
意外的运算符
错误。所以,这里是我的Dockerfile(由Google提供,用于在云上部署映像)

Dockerfile

#Use the official Node.js 10 image
#https://hub.docker.com/_/node
FROM node:10

#Create and change to the app directory
WORKDIR /usr/src/app

#Copy application dependency manifests to the container image.
#A wild card is used to ensure both package.json AND package-lock.json are copied.
#Copying this separately prevents re0running npm install on every code change.
COPY *package.json ./

#Install production dependences
RUN npm install --only=production

#COPY local code to the container image
COPY . .

#Run the web service on container startup
CMD [ "npm", "start" ]
我得到的特定
意外运算符
错误是
/bin/sh:1:[:npm.:意外运算符


老实说,我现在不知道该怎么办。我想我需要第二双眼睛来检查一下。

每次更改后,您都必须从Dockerfile重建图像

docker build --tag="npm_app:latest" -f Dockerfile .
docker run npm_app 

我敢打赌,当您给出代码片段
CMD[“npm”,“start”]
时,您一定是有意或无意地清理了代码,几乎可以肯定是
CMD[“npm”“start”]
当您最初构建映像并尝试将其作为容器运行时

分解错误消息:
/bin/sh:1:[:npm.:意外操作员

它告诉您shell脚本在第一行有问题。哪个shell脚本?由CMD行触发的shell脚本。第1行的部分是因为,在CMD运行的上下文中,这是唯一的一行

然后,它很难理解地说,它在npm语句之后出现了一个问题。意外导致这个问题的最简单方法是忘记逗号

考虑到您显然能够在稍后运行,您很可能:

  • 使用缺少的逗号从Dockerfile生成图像
  • 尝试将映像作为容器运行,但由于生成映像中的CMD已损坏,因此无法运行
  • 修正了错误
  • 尝试将仍然损坏的图像作为容器运行,但仍然无法运行,因为您使用的是相同的图像
  • 在这里发布了您的代码,现在已经安装了修复程序,但似乎不起作用,因为您仍在运行旧映像
  • 这里有建议,包括尝试重建
  • 从Dockerfile重新生成一个新图像,使用固定的逗号
  • 将新图像作为容器运行,一切似乎都神奇地修复了

如果您运行
docker run container\u name npm--version
,会发生什么?我得到
6.9.0
作为响应,如果您的npm安装工作正常…请运行运行同样运行良好的
docker run container\u name npm start
。我得到了
应用程序,正在收听pop 8080
的响应通过运行Docker build--tag=“nmp\u app:latest”-f Dockerfile来重建Docker文件。