在使用 Docker 部署前端应用过程中,我们经常会遇到 no matching manifest 错误。这个错误通常出现在 docker pull 或者 docker run 的时候,它表示 Docker Hub 中没有对应架构的镜像,因此 Docker 引擎无法找到合适的镜像文件。
错误示例
$ docker run -p 8080:80 hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world no matching manifest for unknown in the manifest list entries
如上所示,当我们尝试运行 hello-world 镜像容器时,出现了 no matching manifest 的错误消息。那么该怎样解决这个问题呢?
解决方案
1. 检查镜像标签
在 Docker Hub 上查看镜像时,我们会发现有很多的标签可以选择。这些标签代表着不同的版本和架构。有时我们下载镜像时未指定具体标签,Docker 引擎会默认选择 latest 标签。但有些镜像并没有针对 latest 标签进行构建,导致无法下载。
因此,我们建议在下载镜像时始终指定具体的标签。例如:
$ docker run -p 8080:80 hello-world:linux
2. 检查 Dockerfile
在构建 Docker 镜像时,我们需要编写 Dockerfile 文件,并在其中指定运行环境、依赖库等信息。这些信息的准确性对构建成功与否有着至关重要的作用。若其中有个别信息错误或与实际不符,会导致镜像下载时出现 no matching manifest 错误。
因此,我们建议在构建 Docker 镜像时,仔细检查 Dockerfile 文件,确保每项信息都正确无误。
3. 切换架构
当 Docker 引擎找不到与当前架构相符的镜像时,我们可以尝试切换不同的架构。例如,我们可以切换到 amd64 、arm64 或 armv7 等架构。示例代码如下:
$ docker run --platform=linux/amd64 -p 8080:80 hello-world
4. Docker 代理
若以上方法无法解决 no matching manifest 错误,我们可以尝试使用 Docker 代理。Docker 代理可以在 Docker Hub 中查找镜像并将它们转换为对应的架构。
我们可以使用如下指令设置 Docker 代理:
$ export DOCKER_CLI_EXPERIMENTAL=enabled $ docker buildx create --name mybuilder $ docker buildx use mybuilder $ docker buildx inspect --bootstrap
然后再通过 buildx 构建镜像:
$ docker buildx build --platform linux/amd64 -t hello-world .
这样就能够查找到对应架构的镜像了。
总结
no matching manifest 是 Docker 部署过程中一个常见的错误,也是一个非常棘手的问题。但只要我们仔细检查镜像标签、Dockerfile 文件、切换架构或使用 Docker 代理,就能够避免这个错误的发生。相信掌握了以上解决办法,你在 Docker 部署中遇到的 no matching manifest 错误不再是什么难题了!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654cb9d77d4982a6eb61e9c6