cpoppema / docker-flexget

An auto updating FlexGet container.
82 stars 39 forks source link

Does this work on armhf/raspberry pi? #48

Closed wbern closed 5 years ago

wbern commented 5 years ago

I am getting this if I want to use this image:

standard_init_linux.go:211: exec user process caused "exec format error"

If I just copy your dockerfile and build the image myself on the pi, it works fine. I'm not very experienced with docker so..

cpoppema commented 5 years ago

Hi @wbern, thanks for your question.

I don't have anything besides amd64 architecture available, so I can't be 100% certain. Operating systems usually come in different prebuilt versions for different cpu architectures. For alpine, the base OS for this image, a different baseimage is available (lsiobase/alpine.armhf instead of just lsiobase/alpine) so I can only assume there are differences. I can't tell you why building it yourself would work without you changing that. It's possible docker has a certain convention that checks if a -.armhf is available and uses that when using the armhf docker version.

I will look if I can make an armhf version available but will have to rely on people like you to report back if it actually works or not until I can think of something else.

wbern commented 5 years ago

Sounds good to me. I think indeed it's not more than that.

cpoppema commented 5 years ago

I have created Dockerfile.armhf which has lsiobase/alpine:arm32v7-3.10 as its baseimage instead of just plain old lsiobase/alpine:3.10. I hope that is enough, can you perhaps verify ? I would imagine just running docker pull cpoppema/docker-flexget and recreating your container would do the trick.

cpoppema commented 5 years ago

So it seems like just creating those files isn't enough (if only right).

Docker Hub doesn't actually support automated multi-arch builds at this time. I can cross-build amd64 (which is the default architecture) and arm32v7 on my own computer and push them to Docker Hub manually. I can now create a "manifest" which automatically translates cpoppema/docker-flexget:latest to cpoppema/docker-flexget:arm32v7-latest if you pull it on an arm32v7 machine. The baseimage lsiobase/alpine:3.10 that I use already has this manifest and that is the reason why building it yourself makes it work.

Comparing it now:

 $    docker manifest inspect cpoppema/docker-flexget:latest
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2202,
         "digest": "sha256:4781cd51297baf7b48f2cd2229a205a1a84c77a5b568a9eda4283333e1b3b55e",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2201,
         "digest": "sha256:01a5fbe0bafbe94a45d496589aa6c082e52b16638e92e613236f21d412c00326",
         "platform": {
            "architecture": "arm",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2201,
         "digest": "sha256:a8d79df03a50055ce79a17469b6a45d14547ca256060f04b27799f2499baf3df",
         "platform": {
            "architecture": "arm64",
            "os": "linux"
         }
      }
   ]
}

Looks pretty much the same as the base image's :smile:

 $    docker manifest inspect lsiobase/alpine:3.10
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 947,
         "digest": "sha256:0b9253809fbec0e6b44b8c0430d48747df9d090e816188838a146ea961f7e6f8",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 947,
         "digest": "sha256:ddba2f82d4234e41d70e72963be6f2da1ac163fe12304cb144bd5121e68405f4",
         "platform": {
            "architecture": "arm",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 947,
         "digest": "sha256:9f058f9b73f6e91e57d1f0e16091bd3336cb7879428d26e66db683f066ac7b08",
         "platform": {
            "architecture": "arm64",
            "os": "linux",
            "variant": "v8"
         }
      }
   ]
}