[POSTPONED] Provide Docker ARM Image: Function not implemented exception when launching via docker-compose

Hit me up when you need testing :slight_smile: And let me know if there is anything I can do to help :slight_smile:

As soon as it builds, I will post an update …

1 Like

Just another issue: https://github.com/NuGet/Home/issues/12227

I think we will have to wait a few weeks or months until everything is resolved.

Hi Sebastian,

If that helps, I have quickly tested following change to your Dockerfile and it allowed me to build and then successfuly run Squidex through docker compose from your hosting Github repository. I use Macbook Pro with M1 Max CPU.

I did following changes:

#
# Stage 2, Build Frontend
#
FROM node:18.10-bullseye-slim as frontend

ENV DEBIAN_FRONTEND noninteractive
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
ENV CHROME_BIN=/usr/bin/chromium

RUN apt-get update && \
apt-get install -y wget gnupg && \
apt-get install -y fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \
    libgtk2.0-0 libnss3 libatk-bridge2.0-0 libdrm2 libxkbcommon0 libgbm1 libasound2 && \
apt-get install -y chromium && \
apt-get clean


WORKDIR /src
----- rest of dockerfile

I don’t really know how you built your base image for frontend build, but you may want to apply changes above to it, then build a multi-arch image.

Regards,
Krzysztof

2 Likes

Docker is not the problem for me. It is actually dotnet and docker.

I have used latest “master” branch from squidex repo with dotnet 7 SDK installed. No issues here.

How do you build? On Mac?

Yes on my M1 Mac. I checked out master source, modified Dockerfile as in first post and ran “build.sh”. I modified build.sh to push new built image to my personal docker repo.

Then I checked out squidex-hosting repo, changed the “image” value to point to my custom image in docker-compose-noproxy.yaml. Ran docker-compose up and all works well.

Previously I had QUEMU signal errors, now it works like a charm.

I presume you are trying to do it from Windows machine but target multiple architectures ?

I do not have a mac and afaik the github actions are all Linux machines. There are QEMU errors. If you find a solution that runs on github I would appreciate it, but I already spend days and was jumping from one error to the next. Docker and .NET and so on. Also internal errors from the build engines, not just misconfiguration.

I understand, I spent half a day today on it, it’s already far more than I usually do. I use Gitlab with my stuff, but will see if I can find a place to test this on Github. Would love to contribute here.

1 Like

This is my branch: https://github.com/Squidex/squidex/tree/multi-platform

In the mean time Docker for Mac pushed an update https://docs.docker.com/desktop/release-notes/#4160 " * New Beta feature for MacOS 13, Rosetta for Linux, has been added for faster emulation of Intel-based images on Apple Silicon."

I will test if this works and circle back here

Can confirm that until ARM support is done, this is a viable workaround.

Only extra thing on my end was adding the following env var:
ASPNETCORE_hostBuilder__reloadConfigOnChange=false

Because startup would fail, on Unhandled exception. System.IO.IOException: Function not implemented (whereas before the container would not even start)

I think this change could be made directly into the dockerfile.

Thanks for the outlined workaround, I can confirm that with Rosetta it’s working as expected. One thing I’ve noticed though is that I can only get to run squidex/squidex:6, whereas squidex/squidex:7 does not work for me. Unfortunately, there’s not even any log output I could share. As I can’t find anything else in the forum regarding this behaviour I assume this is also related to Docker + ARM? Can I do anything within the container for better debugging / sharing information? Thanks for any response!

You could try to run Squidex from Visual Studio. Perhaps you can then find the error.

Thanks for the quick response. Sorry I have only JetBrains and literally no experience with .net applications. There should be at least some location inside the container where I could look for potential log outputs, isn’t there?

JetBrains rider works as well.

Yes, but if it crashes before it could even log something, then you need to debug it.

Thanks for the tip Sebastian - I could start the backend from master branch with JetBrains Rider and can also see logging output on the console as if I would use the Docker Container … it crashes then with a timeout error regarding the MongoDB connection but this is expected I guess as I’ve no MongoDB running locally. So I’m again stuck why this is not working when using squidex/squidex:7 docker image.

I have no idea. Are you sure there is nothing in the logs with docker logs and so on?