Manifest lists linux/arm64, but no matching manifest for linux/arm64 exists in the manifest list entries?

I’ve built an Elasticsearch 2.4.4 Docker image to support both amd64 & arm64 (gordysc/elasticsearch:2.4.4). When I inspect the manifest on my M1 Mac it lists the following:

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2196,
         "digest": "sha256:8b00b403d6dc4d17673053d14fb7db584923175696a8ddf3536b0463349cff8e",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2196,
         "digest": "sha256:cb627ceca76b9fae18df022de2c69644aa827c516de99a57428ad980906b5c7b",
         "platform": {
            "architecture": "arm64",
            "os": "linux"
         }
      }
   ]
}

I need to support both platforms for my development team so my docker-compose.yml looks like so:

version: "3.9"
services:
  elasticsearch:
    container_name: elasticsearch
    image: gordysc/elasticsearch:2.4.4
    ports:
      - "9200:9200"

Note: I can’t just specify the arm64 platform as developers on both architectures will have to work with this file.

However, when I attempt to pull the image down it complains with the following:

no matching manifest for linux/arm64 in the manifest list entries

My hunch is the manifest file for the image is missing something, but I’m not sure what?

I could pull the image on my M1 mac. Make sure you remove the amd64 version from your mac before trying to use the arm64 version. If you don’t set the platform in the compose file, docker will use the image you have locally even If it is not the right architecture.

You don’t need to, but if you want to, you can create a compose file with a default value and overwrite it by using environment variables

version: "3.9"
services:
  elasticsearch:
    platform: "linux/${ARCH:-amd64}"
    container_name: elasticsearch
    image: gordysc/elasticsearch:2.4.4
    ports:
      - "9200:9200"

It would use amd64 by default and you could use a .env file not version controlled (.gitignore) to allow other d evelopers on mac to change it.

1 Like

Thanks for the response! We found out the root issue was my docker-compose.yml had another service in it that didn’t have an M1 compatibly image (it wasn’t ES 2.4 that was actually the issue). I updated that service to an M1 compatibly version and everything worked. Appreciate the ideas!