我是Docker的超级新手,最近将项目从App Engine迁移到Cloud Run。很轻松,喜欢它。
但是,现在,我正在尝试更新图像(因为我添加了一些新代码)。我知道我需要进入一个实际的容器来更新图像(我认为吗?),但是当我尝试docker run
时,会出现unexpected operator
错误。
这绝对让我发狂。
我无法启动容器。我无法编辑图像。我无法在Cloud Run上上传新版本。
据我所知,unexpected operator
错误必须处理Dockerfile。因此,这是我的Dockerfile(由Google提供,用于在Cloud Run上部署映像)。
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
老实说,我现在不知道该怎么办。我想我需要再看一眼。
答案 0 :(得分:2)
每次更改后,您都必须从Dockerfile重建映像
var additionalInformation= response.AdditionalInformation.Select( async x => new AdditionalInformationItem
{
StatementCode = x?.StatementCode?.Value,
LimitDateTime = x?.LimitDateTime?.Item?.Value,
StatementTypeCode = x?.StatementTypeCode?.Value,
StatementDescription = x?.StatementDescription?.Value,
AdditionalInformationResult = await BuildAdditionalInformationPointers(x)
});
await Task.WhenAll(additionalInformation);
//This will iterate the results so may not be the most efficient method if you have a lot of results
List<AdditionalInformationItem> unwrapped = additionalInformation.Select(s => s.Result).ToList();
答案 1 :(得分:2)
我敢打赌,当您给代码片段CMD [ "npm", "start" ]
时,有意或无意地清理了代码,几乎可以肯定CMD [ "npm" "start" ]
最初构建映像并尝试将其作为容器运行时。
打破错误消息:/bin/sh: 1: [: npm.: unexpected operator
它告诉您Shell脚本在第一行出现问题。哪个shell脚本?由CMD行触发的shell脚本。第1行是因为在CMD运行的情况下,这是唯一的一行。
然后它很模糊地说,它在npm语句之后出现问题。导致意外的最简单方法是忘记逗号。
鉴于您显然能够在以后使事情运行,很可能是您: