如何修复 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 重建一个新的镜像,选择固定的逗号
- 运行 新图像作为容器,一切似乎都神奇地修复了
我是一个超级新手 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 重建一个新的镜像,选择固定的逗号
- 运行 新图像作为容器,一切似乎都神奇地修复了