我是一个超级新手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" ]