从错误信息来看问题很明显:当前xx镜像所使用的manifest list里还不支持此平台。而我当前运行docker的平台是mips64架构,而非主流的x86_64 、amd64、arm64等。不仅仅是执行docker run hello-world还是执行docker pull xx,应该都会出现相同的问题。
早期Docker镜像存储的设计没有充分考虑到镜像Multi architecture的支持,而是简单的使用镜像存储库的前缀来区分相同应用的不同平台,并建议开发者将不同平台的镜像应该push到相对应的Docker hub的镜像仓库中。例如运行busybox在多个平台上,按照Docker社区的方法如下:
ppc64le: docker run -it --rm ppc64le/busybox
s390x: docker run -it --rm s390x/busybox
基于Docker社区的做法,对于我们自己的应用程序Docker镜像多平台支持,我们还可以采取类似方法:
- 基于tag
x86-64: docker run -it --rm myapp:x86-64
ppc64le: docker run -it --rm myapp:ppc64le
- 基于image 名称的后缀
x86-64: docker run -it --rm myapp_x86-64
ppc64le: docker run -it --rm myapp_ppc64le
这个办法确实有点low。好的设计是应该用户只要执行docker pull myapp就行了而不用关心容器的运行平台。好消息是从Docker registry v2.3和Docker 1.10 开始实现了Multi architecture Docker镜像功能。Docker hub就可以pull multi architecture Docker镜像了。具体的multi-arch的原理分析可以参看https://blog.csdn.net/dev_csdn/article/details/79138424
但是遗憾的是目前还没有对mips64le做支持,包括offical images。
目前对于hello-world的镜像。我已经提交一版到dockerhub。如果你的主机环境也是mips64el,不妨试试我的镜像
docker run sunny158/hello-world