docker icon indicating copy to clipboard operation
docker copied to clipboard

Unable to Generate Logs and Hanging Execution with unityci/editor Docker Image on Mac with Apple Silicon

Open alronz opened this issue 1 year ago • 3 comments

I am trying to use the Docker image unityci/editor:ubuntu-2022.3.18f1-webgl-3.0.1 on a Mac with Apple Silicon (M1/M2) to run the following command after setting the license:

unity-editor -enablePackageManagerTraces -logfile /dev/stdout -quit -batchmode -nographics -buildTarget WebGL -projectPath "/src/Frontend"

Problem Description:

  • When I build the Docker image on Linux or Windows that contains the above command, I observe that the command produces many logs and executes successfully.
  • However, when I build the image using the same command on a Mac with an Apple chip (M1/M2), I encounter the following issues:
    • The command produces no logs.
    • The execution appears to hang without completing.

Note that I execute the docker build command with the flag --platform=linux/amd64 since there is no image for arm64

I would appreciate any insights or guidance on how to resolve this issue and make the Docker image work smoothly on Macs with Apple Silicon. Thank you!

alronz avatar Jan 24 '24 20:01 alronz

That's a good question, I reproduced this as well. I haven't tried building my own docker image locally on Apple chip (M3 here), but I did reproduce the problem where trying to run unity-editor inside a container and the process did hang without printing anything to console. I even tried with base image (without modules installed).

export DOCKER_DEFAULT_PLATFORM=linux/amd64
docker run -v "$(pwd):/app" --rm docker.io/unityci/editor:2022.3.4f1-base-3 unity-editor \
  -logFile /dev/stdout \
  -quit \
  -serial "$UNITY_SERIAL" \
  -username "$UNITY_EMAIL" \
  -password "$UNITY_PASSWORD" \
  -projectPath "/app/BlankProject"

I'm interested in a solution too. That is an architecture compatibility challenge. I quickly eplored some options.

Rosetta 2

I know there is Rosetta 2, a binary translation layer for running x86_64 applications on ARM architecture. Rosetta can be installed like this:

/usr/sbin/softwareupdate --install-rosetta --agree-to-license

But from there, I'm not sure what would be the next steps, I haven't tried anything past this, but I think running with DOCKER_DEFAULT_PLATFORM=linux/amd64 or --platform=linux/amd64 is already using Rosetta.

Writing a Dockerfile that is ARM compatible

I think for this to work, we'd have to try and use a base image that is already arm compatible and then compile and install dependencies. This is something to explore.

References

  • https://github.com/game-ci/docker/blob/main/images/ubuntu/base/Dockerfile

GabLeRoux avatar Jan 25 '24 13:01 GabLeRoux