如何修复Docker意外操作员错误



我是一个超级新手Vis-a-vis docker,最近将一个项目从App Engine转移到云运行。很简单,喜欢它。

现在,我正在尝试更新图像(因为我添加了一些新代码(。我知道我需要进入一个实际的容器来更新图像(我想?(,但是当我尝试使用docker run时,我会收到一个unexpected operator错误。

这让我绝对打击。

我无法启动容器。我无法编辑我的图像。我无法在云运行中上传新版本。

根据我可以收集的内容,unexpected operator错误必须处理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" ]

我遇到的特定unexpected operator错误是/bin/sh: 1: [: npm.: unexpected operator

老实说,我目前不知道该怎么办。我想我需要第二套眼睛才能看一下。

我要打赌您有意或无意地打扫您的代码,当您给出代码片段CMD [ "npm", "start" ]时,几乎可以肯定是CMD [ "npm" "start" ]当您最初构建图像并尝试将其作为容器运行时。

分解错误消息:/bin/sh: 1: [: npm.: unexpected operator

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

然后说,毫无疑问,它在NPM声明之后遇到了问题。意外导致忘记逗号的最简单方法。

鉴于您显然能够以后运行,因此很可能是您:

  • 用丢失的逗号从dockerfile构建图像
  • 尝试将图像作为容器运行,并且由于构建图像中的CMD损坏而无法工作
  • 修复了错误
  • 尝试运行仍然损坏的图像,因为容器仍然没有工作,因为您使用相同的图像
  • 现在在这里发布了您的代码,现在已经准备好了,但似乎不起作用,因为您仍在运行旧的图像
  • 在这里得到建议,包括尝试重建
  • 重建了Dockerfile的新图像,拿起固定的逗号
  • 将新图像作为容器运行,一切似乎神奇地修复了

您必须在每次更改之后从Dockerfile重建图像

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

我遇到了这个问题,我需要在我的dockerfile的cmd步骤中使用双引号而不是单引号

CMD [ "npm", "start" ]

最新更新