centos 拉取阿里云私有镜像并运行
在阿里云服务器执行镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/ichangyou/mfefficiency-backend:1.0.0
docker run -d --restart always -p 8001:8001 registry.cn-hangzhou.aliyuncs.com/ichangyou/mfefficiency-backend:1.0.0
因为是在 macbook pro m1 系统打包的 docker 镜像,在centos 直接运行竟然不成功!
报错:
docker run -d --restart always -p 8001:8001 registry.cn-hangzhou.aliyuncs.com/ichangyou/mfefficiency-backend:1.0.0
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v4) and no specific platform was requested
这个警告表示你尝试运行的 Docker 镜像是为 ARM 架构(linux/arm64/v8
)构建的,而你的主机是基于 x86_64 架构(linux/amd64/v4
)。由于这两个架构不匹配,镜像可能无法在你的主机上正常运行。
默认情况下,在 x86_64 架构的机器上构建的 Docker 镜像将会是 x86_64 架构的。
你可以使用以下命令来查看镜像的架构信息:
docker inspect mfefficiency-backend:1.0.0 | grep Architecture
解决方法:
1. 使用 --platform
参数指定正确的平台
如果你确定要在 x86_64(amd64
)架构上运行该镜像,可以尝试强制指定平台为 amd64
:
docker run -d --platform linux/amd64 --restart always -p 8001:8001 registry.cn-hangzhou.aliyuncs.com/ichangyou/mfefficiency-backend:1.0.0
注意:强制运行 ARM 镜像在 x86_64 主机上可能会失败,因为某些镜像可能依赖特定的硬件架构。如果你遇到问题,可以考虑使用 QEMU 来模拟 ARM 架构(QEMU 的支持需要 Docker Desktop 或者 Docker 上启用跨架构支持)。
2. 查找或构建适用于 amd64
的镜像
如果该镜像在阿里云上没有 amd64
架构版本,你可以尝试以下方法:
-
查找是否有适用于
amd64
架构的镜像:检查镜像仓库,看看是否有适用于amd64
架构的镜像版本。 -
构建适用于
amd64
架构的镜像:如果你有Dockerfile
,可以在amd64
架构的主机上重新构建镜像:docker buildx build --platform linux/amd64 -t registry.cn-hangzhou.aliyuncs.com/ichangyou/mfefficiency-backend:1.0.0 .
然后重新运行容器。
3. 使用 QEMU 进行跨架构运行
如果你确实需要运行 ARM 架构的镜像,可以使用 QEMU 来模拟 ARM 环境。
-
启用 QEMU:
确保你的 Docker 安装了 QEMU 用户模式仿真层,通常 Docker Desktop 在 macOS 和 Windows 上已经默认启用。在 Linux 上,可以安装并启用 QEMU:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
-
然后再运行 ARM 镜像:
docker run -d --platform linux/arm64 --restart always -p 8001:8001 registry.cn-hangzhou.aliyuncs.com/ichangyou/mfefficiency-backend:1.0.0
遇到问题
在阿里云centos服务器安装并启用 QEMU这一步又报错,主要是因为qiang的缘故,网络不通。
我的解决方法是,先在我的 macbook 拉取 multiarch/qemu-user-static镜像,并将其上传到阿里云私有仓库,然后再在阿里云centos服务器安装并启用 QEMU :
1. 拉取镜像
首先,从 Docker Hub 拉取 multiarch/qemu-user-static:latest
镜像:
docker pull multiarch/qemu-user-static:latest
2. 登录阿里云容器镜像服务
登录到你的阿里云容器镜像服务(ACR):
docker login --username=your-username registry.cn-hangzhou.aliyuncs.com
请将 your-username
替换为你的阿里云账号用户名,系统会提示你输入密码。
3. 标记镜像
将拉取的镜像标记为阿里云私有镜像仓库的格式。假设你的仓库名称为 your-repo
,镜像名称为 qemu-user-static
:
docker tag multiarch/qemu-user-static:latest registry.cn-hangzhou.aliyuncs.com/your-repo/qemu-user-static:latest
4. 推送镜像到阿里云
将镜像推送到阿里云的私有镜像仓库:
docker push registry.cn-hangzhou.aliyuncs.com/your-repo/qemu-user-static:latest
5. 确认上传成功
你可以登录到阿里云容器镜像服务的控制台,查看镜像是否成功上传。
这样,你就完成了从 Docker Hub 拉取 multiarch/qemu-user-static:latest
镜像并将其上传到阿里云私有镜像仓库的过程。
具体实践:
docker pull multiarch/qemu-user-static:latest
docker login --username=changyou0730@163.com registry.cn-hangzhou.aliyuncs.com
docker tag multiarch/qemu-user-static:latest registry.cn-hangzhou.aliyuncs.com/ichangyou/qemu-user-static:latest
docker push registry.cn-hangzhou.aliyuncs.com/ichangyou/qemu-user-static:latest