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

How to fix Docker Unexpected Operator Error?

我是一个超级新手 Docker,最近将一个项目从 App Engine 转移到 Cloud 运行。很轻松,很喜欢。

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

这让我非常疯狂。

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

据我所知,unexpected operator 错误必须处理 Docker 文件。所以,这是我的 Docker 文件(由 Google 提供,用于在云 运行 上部署图像)。

Docker文件

#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

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

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

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

我敢打赌,当您提供代码片段时,您有意或无意地清理了代码 CMD [ "npm", "start" ] 几乎可以肯定 CMD [ "npm" "start" ] 当您最初构建图像并尝试 运行 将其作为容器时。

分解报错信息:/bin/sh: 1: [: npm.: unexpected operator

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

然后它说,在 npm 声明之后出现了问题,非常难以辨认。最容易导致意外的方法是忘记逗号。

鉴于您显然能够在 运行 之后得到东西,您很可能:

  • 从缺少逗号的 Dockerfile 构建映像
  • 尝试运行将图像作为容器,但由于构建图像中损坏的 CMD 而无法正常工作
  • 修正了错误
  • 尝试 运行 仍然损坏的图像作为容器,但它仍然无法正常工作,因为您使用的是相同的图像
  • 在此处发布了您的代码,现在已修复,但似乎无法正常工作,因为您仍然是 运行 旧图像
  • 在这里得到建议,包括尝试重建
  • 从 Dockerfile 重建一个新的镜像,选择固定的逗号
  • 运行 新图像作为容器,一切似乎都神奇地修复了