Image labeled as arm64 incorrectly for fly machines

Hi, I’m trying out fly machines with a node Docker image. Namely I’m running the curl script from the tutorial:

curl -i -X POST \
-H "Authorization: Bearer ${FLY_API_TOKEN}" -H "Content-Type: application/json" \
"http://${FLY_API_HOSTNAME}/v1/apps/rciel/machines" \
-d '{
  "name": "odoacer-machine",
  "config": {
    "image": "registry.fly.io/rciel",
    "env": {
      "APP_ENV": "production"
    },
    "services": [
      {
        "ports": [
          {
            "port": 443,
            "handlers": [
              "tls",
              "http"
            ]
          },
          {
            "port": 80,
            "handlers": [
              "http"
            ]
          }
        ],
        "protocol": "tcp",
        "internal_port": 8080
      }
    ]
  }
}'

I received an error that my image is arm64 linux instead of amd64 linux, so I rebuilt my image with buildx for amd64 linux. I verified this using docker image inspect:

"Architecture": "amd64",
"Os": "linux",

I’ve pushed to the registry, but I still get the same error message. Is there any way to validate that I’ve indeed pushed a new version to the registry? Or to figure out why the API is still flagging my image as arm64 and not amd64?

Solved this by creating a new app with a different name (deleting and recreating app with same name didn’t work). Maybe a cache invalidation issue?

Did you notice any logs about using a remote builder?

arm64 usually comes from local Docker builds on MacOS with an m1 processor. flyctl should try make it build x86, but it sounds like it didn’t?

If you’re not running Docker, it’ll use a remote Docker daemon that can’t build for arm64 at all.

Correct me if I’m wrong, but I’m not using flyctl to build the image? I’m building the image manually—I tried both with buildx and with an AMD64 server—and then pushing it to the registry. I’m then trying to create a machine using the REST API. It’s in that process where I get this error.

FWIW, I managed to get around this with docker buildx:

$ docker buildx create --use
$ docker buildx build --platform linux/amd64 . -t registry.fly.io/my-app:latest --push