如何修复 Docker 意外操作员错误?
Posted
技术标签:
【中文标题】如何修复 Docker 意外操作员错误?【英文标题】:How to fix Docker Unexpected Operator Error? 【发布时间】:2019-11-06 21:23:23 【问题描述】:我是 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
老实说,我现在不知道该怎么办。我想我需要第二双眼睛才能仔细查看。
【问题讨论】:
如果你运行docker run container_name npm --version
会发生什么?
我收到6.9.0
作为回复
那么您的 npm 安装工作正常...请运行此docker run container_name npm start
运行也很好。我收到了我应该收到的App listening to pop 8080
回复
你必须通过运行docker build --tag="nmp_app:latest" -f Dockerfile .
来重建Docker文件
【参考方案1】:
我敢打赌,当你给代码 sn-p CMD [ "npm", "start" ]
时,你有意或无意地清理了你的代码,几乎可以肯定是 CMD [ "npm" "start" ]
当您最初构建映像并尝试将其作为容器运行时。
分解错误信息:/bin/sh: 1: [: npm.: unexpected operator
它告诉你 shell 脚本在第一行有问题。哪个shell脚本?由 CMD 行触发的 shell 脚本。第 1 行部分是因为,在 CMD 运行的上下文中,这是唯一的一行。
然后它在 npm 语句之后非常难以辨认地说它有问题。不小心造成这种情况的最简单方法是忘记逗号。
鉴于您显然能够稍后运行,您很可能:
从缺少逗号的 Dockerfile 构建映像 尝试将映像作为容器运行,但由于构建的映像中的 CMD 损坏而无法正常工作 修复了错误 尝试将仍然损坏的图像作为容器运行,但它仍然无法正常工作,因为您使用的是相同的图像 在此处发布了您的代码,现在已修复,但似乎无法正常工作,因为您仍在运行旧映像 在这里得到建议,包括尝试重建 从 Dockerfile 重建一个新镜像,使用固定的逗号 将新映像作为容器运行,一切似乎都神奇地修复了【讨论】:
【参考方案2】:每次更改后,您都必须从 Dockerfile 重建映像
docker build --tag="npm_app:latest" -f Dockerfile .
docker run npm_app
【讨论】:
以上是关于如何修复 Docker 意外操作员错误?的主要内容,如果未能解决你的问题,请参考以下文章