roadmap
roadmap copied to clipboard
[Docker Desktop for Mac] - Support for running x86-64 binaries with Rosetta 2
Tell us about your request Support Rosetta 2 for running x86-64 Linux binaries on Apple Silicon
Which service(s) is this request for? Docker Desktop for Mac
Tell us about the problem you're trying to solve. What are you trying to do, and why is it hard? Ensure that users can run their Intel-based workloads on Apple Silicon, using Rosetta 2
Are you currently working around the issue? Docker Desktop users can currently use QEMU for this
@christophermclellan With this feature, we should be able to use Microsoft SQL server for Linux on M1. This would be awesome!
we should be able to use Microsoft SQL server for Linux on M1
If this is true you're going to make many long-suffering mssql users very happy. Very much looking forward to this.
Due to the presumed qemu "issue" there is actually no workaround for running that image on arm64. (yes, I know about colima. no, it's not a viable workaround)
@christophermclellan Are you able to provide some more detail on the plans for implementing this feature?
@christophermclellan This would allow us to use Java Temurin images. Currently, they have been investing lots of time figuring out how to build images for m1, and it doesn't seem this will be solved anytime soon.
Multiple other services would work amazingly, like Payara or MSSQL
Another use case for running Intel on Rosetta 2 over a native amd64 image is because of dev/prod parity with the server for example - see https://github.com/heroku/stack-images/issues/194
@christophermclellan Are you able to provide a timeline describing when this feature is going to be implemented?
Any development here? Ball-park timeline for this?
Please add support for Apple M1 silicon.
Hi folks, please excuse my delay regarding timelines. So, right now we are focussing on getting virtiofs implemented as the default file sharing mechanism on Mac, we're very close on this one. Once complete, we'll immediately turn attention to Rosetta. I'm not able to disclose precise timelines, but...soon !
rosetta seems to works quite well, tested using ventura, utm 4.04 beta & manual docker setup on macbook m1 air
root@ub1:~# uname -a Linux ub1 5.15.0-47-generic #51-Ubuntu SMP Fri Aug 12 08:18:32 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
root@ub1:~# mount | grep rose rosetta on /mnt/rosetta type virtiofs (rw,relatime)
root@ub1:~# ps -ef | grep rose 2001 5803 2728 1 14:28 ? 00:00:42 /mnt/rosetta/rosetta /opt/tibco/ftl/6.6/bin/tibftlserver -c /config/ftl.yaml -n ftlserver-0 2001 5882 5803 3 14:28 ? 00:01:32 /mnt/rosetta/rosetta /opt/tibco/ftl/6.6/bin/tibmux --realmserver http://127.0.0.1:30080 --client-label ftl.ftlserver-0 --external-address [email protected]:30080 --bind-address *:30080 --peer-muxes [email protected]:30080 --trace warn 2001 5983 5803 42 14:28 ? 00:18:50 /mnt/rosetta/rosetta /opt/tibco/ftl/6.6/bin/tibrserver --server.label realm.ftlserver-0 --data /data/ftlserver_0_data --http 127.0.0.1:0 --ftl ftlserver-0.ftlservers:30083 --gui 127.0.0.1:0 --client.url http://127.0.0.1:30080 --ftlserver.urls [email protected]:30080 --ftlserver.name ftlserver-0 1001 6187 4686 2 14:28 ? 00:00:56 /mnt/rosetta/rosetta /etc/alternatives/jre/bin/java -javaagent:/jmx_prometheus_javaagent-0.16.1.jar=8080:/opt/config/config.yaml -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/opt/activemq/conf/login.config -Dcom.sun.management.jmxremote -Djava.awt.headless=true -Djava.io.tmpdir=/opt/apache-activemq-5.15.2//tmp -Dactivemq.classpath=/opt/apache-activemq-5.15.2//conf:/opt/apache-activemq-5.15.2//../lib/: -Dactivemq.home=/opt/apache-activemq-5.15.2/ -Dactivemq.base=/opt/apache-activemq-5.15.2/ -Dactivemq.conf=/opt/apache-activemq-5.15.2//conf -Dactivemq.data=/opt/apache-activemq-5.15.2//data -jar /opt/apache-activemq-5.15.2//bin/activemq.jar start 2001 6337 5803 2 14:28 ? 00:01:08 /mnt/rosetta/rosetta /opt/tibco/ftl/6.6/bin/tibpserver --name default_ftlserver-0 --data /data/ftlserver_0_data --realmserver http://127.0.0.1:30080 2001 6377 4463 3 14:28 ? 00:01:36 /mnt/rosetta/rosetta /opt/tibco/as/4.7/bin/tibdgkeeper -r http://ftlserver-0.ftlservers:30080 -n keeper-0 -g VirtueleTreinInfoStore 2001 6419 2486 5 14:28 ? 00:02:31 /mnt/rosetta/rosetta /opt/tibco/as/4.7/bin/tibdgproxy -r http://ftlserver-0.ftlservers:30080 -n proxy-0 -g VirtueleTreinInfoStore 2001 6421 3376 0 14:28 ? 00:00:09 /mnt/rosetta/rosetta /opt/tibco/as/4.7/bin/tibdgadmind -r http://ftlserver-0.ftlservers:30080 -l :30081 2001 6734 4895 3 14:28 ? 00:01:24 /mnt/rosetta/rosetta /opt/tibco/as/4.7/bin/tibdgnode -r http://ftlserver-0.ftlservers:30080 -n cs-01-node-0 -g VirtueleTreinInfoStore joost 7107 3827 0 14:28 ? 00:00:19 /mnt/rosetta/rosetta /opt/tibco/ems/8.6/bin/tibemsd -config /shared/ems/config/emsserver-svc.json root 7141 3827 0 14:28 ? 00:00:00 /mnt/rosetta/rosetta /usr/bin/sh /runPromCollector.sh root 7159 7141 0 14:28 ? 00:00:18 /mnt/rosetta/rosetta /usr/bin/java -cp emsStatsLogger.jar:/ems/lib/tibjmsadmin.jar:/ems/lib/jms-2.0.jar:/ems/lib/tibjms.jar EmsStatsPromCollector -config /config/servers.xml -interval 60 -job TIB-EMS-vtlocal -debug -nolog 48 9352 9190 0 14:31 ? 00:00:00 /mnt/rosetta/rosetta /bin/bash /treinviewer/scripts/run.sh root 9368 9352 0 14:31 ? 00:00:00 /mnt/rosetta/rosetta /usr/sbin/httpd -D FOREGROUND 48 9369 9368 0 14:31 ? 00:00:00 /mnt/rosetta/rosetta /usr/sbin/httpd -D FOREGROUND 48 9370 9368 0 14:31 ? 00:00:02 /mnt/rosetta/rosetta /usr/sbin/httpd -D FOREGROUND 48 9371 9368 0 14:31 ? 00:00:02 /mnt/rosetta/rosetta /usr/sbin/httpd -D FOREGROUND 48 9372 9368 0 14:31 ? 00:00:02 /mnt/rosetta/rosetta /usr/sbin/httpd -D FOREGROUND 48 10480 9368 0 14:35 ? 00:00:03 /mnt/rosetta/rosetta /usr/sbin/httpd -D FOREGROUND root 13340 13162 0 14:38 ? 00:00:01 /mnt/rosetta/rosetta /usr/bin/sh /wait-for-service.sh root 17114 16961 0 14:47 ? 00:00:00 /mnt/rosetta/rosetta /usr/bin/sh /wait-for-service.sh root 17357 17159 0 14:47 ? 00:00:00 /mnt/rosetta/rosetta /usr/bin/sh /wait-for-service.sh root 17374 17193 0 14:47 ? 00:00:00 /mnt/rosetta/rosetta /usr/bin/sh /wait-for-service.sh 2001 21600 20248 12 14:58 ? 00:01:54 /mnt/rosetta/rosetta /opt/tibco/be/6.0/bin/be-engine --propFile /opt/tibco/be/6.0/bin/be-engine.tra --propVar AS_DISCOVER_URL=tcp://masterdataengine-74c44cd5c7-rg8bx:50000 --propVar AS_LISTEN_URL=tcp://masterdataengine-74c44cd5c7-rg8bx:50000 --propVar jmx_port=5555 -n VTMasterDataEngine -c /opt/tibco/be/application/MasterData.cdd -u VTMasterDataEngine -p beprops_all.props /opt/tibco/be/application/ear/be_masterdata-1.66.0.ear --innerProcess 472 25099 24317 0 15:04 ? 00:00:04 /mnt/rosetta/rosetta /usr/share/grafana/bin/grafana-server --homepath=/usr/share/grafana --config=/etc/grafana/grafana.ini --packaging=docker cfg:default.log.mode=console cfg:default.paths.data=/var/lib/grafana cfg:default.paths.logs=/var/log/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins cfg:default.paths.provisioning=/etc/grafana/provisioning root 28779 13340 1 15:12 ? 00:00:00 /mnt/rosetta/rosetta /usr/bin/nc -z cacheenginediscoverynode-svc 50000 root 28780 17114 1 15:12 ? 00:00:00 /mnt/rosetta/rosetta /usr/bin/nc -z cacheengine-svc 50000 root 28781 17374 1 15:12 ? 00:00:00 /mnt/rosetta/rosetta /usr/bin/nc -z cacheengine-svc 50000 root 28783 17357 1 15:12 ? 00:00:00 /mnt/rosetta/rosetta /usr/bin/nc -z cacheengine-svc 50000 root 28785 23820 0 15:12 pts/2 00:00:00 grep --color=auto rose
Hi folks, please excuse my delay regarding timelines. So, right now we are focussing on getting virtiofs implemented as the default file sharing mechanism on Mac, we're very close on this one. Once complete, we'll immediately turn attention to Rosetta. I'm not able to disclose precise timelines, but...soon !
Thank you @christophermclellan!
I need to dev/run python on a x86_64 docker on M1 Macs. Looking forward to it!
Hi folks, please excuse my delay regarding timelines. So, right now we are focussing on getting virtiofs implemented as the default file sharing mechanism on Mac, we're very close on this one. Once complete, we'll immediately turn attention to Rosetta. I'm not able to disclose precise timelines, but...soon !
Heya, any news? 😄
This will be a game changer for our team, thank you for your hard work!
MS SQL on Mac M1 is requested a lot, I think this would solve that issue too.
Is there any beta version can try it?
If it helps anyone, when running a fedora 36 VM using UTM with rosetta mounted to /media/rosetta/rosetta the following command allowed docker to use it for x86_64 images
echo ':rosetta-x86_64:M:0:\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00:\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/media/rosetta/rosetta:CF' > /proc/sys/fs/binfmt_misc/register
@wowditi Sounds awesome! Are you able to provide some more detail on how to setup & use docker in this scenario?
@thisisthekap start an aarch64 fedora 36 VM (https://getfedora.org/en/workstation/download/) using UTM and enable "Use Apple Virtualization" and "Enable Rosetta". Once the installation is complete install docker according to the instructions (https://docs.docker.com/engine/install/fedora/). Then mount the Rosetta binary as described by the UTM documentation https://docs.getutm.app/advanced/rosetta/. Fedora does not include an "/usr/sbin/update-binfmts" script so instead of that you need to use the above command. Then you should be able to start docker x86_64 images and you can check using "ps" that every command is started with /media/rosetta/rosetta and that the performance is a lot better than qemu-user-static (which is what docker desktop uses).
I tried to get it to work in docker desktop using a simple mount, but I think the problem is that the VM needs to run in a special memory mode which I could not figure out how to do unfortunately.
@wowditi Concerning using the new vm in a transparent way: Would the creation of a separate docker context be feasible, that might be optionally set to be the default one? (https://docs.docker.com/engine/context/working-with-contexts/)?
@thisisthekap You could do that, but I've simply been using docker in the VM itself. Do realise that in order to mount from the Mac filesystem you would first have to mount it to the VM which is quite a bit slower than using the filesystem in the VM itself (this is also how Docker desktop does it, only they do it a bit more transparently).
No, I do not want do do any mounts. I just want to use it as docker machine for my local docker cli on my mac.
Then it works. First expose the port of the VM, such as https://gist.github.com/styblope/dc55e0ad2a9848f2cc3307d4819d819f describes. Then create a new docker context e.g. (the ip must be that of the vm): docker context create vm --docker "host=tcp://192.168.2.41:2375" And then you can do: docker -c vm run -it -p 80:80 strm/helloworld-http You can then in the browser go to the ip address of the VM and should see the hello world page
lima-vm recently implemented Rosetta support in the latest development branch. It allows you run amd64 container on Apple silicon, via Rosetta, with less overhead compared to qemu.
https://github.com/lima-vm/lima/releases/tag/v0.14.0-beta.1
For people who are interested in rosseta support may try this.
@dictcp Did you get docker working using the lima beta?
@dictcp +1 on that too, I can't even figure out how to install Lima BETA. Spent 2 hours and then gave up.
@thisisthekap, @JackEllis
~Here's a quick guide on how I got Lima/Colima running with Rosetta on my machine:~ see last edit
brew install --HEAD lima
git clone https://github.com/abiosoft/colima.git && cd colima
git checkout support-vz
make build
sudo make install
colima start
From there you should be able to use docker run ..., docker ps, etc, as usual.
Edit: Here's how you can verify that rosetta is being utilized
docker run -it --platform linux/amd64 ubuntu
EDIT 2: As of December 14th, you can now install Colima simply with brew install colima --HEAD. You don't need to clone the repo and build it yourself like before.
In case it is going to cause you issues, colima support-vz only enables rosetta on OSX 13 (ventura).
@mmeyer724 Thank you very much for your work! I had to do some adjustments to the script you suggested (https://github.com/microsoft/mssql-docker/issues/734#issuecomment-1333696500).
MSSQL Server is now running just fine on M1 using Rosetta 2 😄
Yeah. My stack of x86 containers is running beautifully in Colima on the Rosetta 2 branch. Thanks! Would love to see this in Docker Desktop for Mac too.