roadmap icon indicating copy to clipboard operation
roadmap copied to clipboard

Please support Docker Desktop (WSL2) on Windows on ARM

Open dennisameling opened this issue 5 years ago • 125 comments

Tell us about your request Devices that run Windows on ARM (arm64), like the Microsoft Surface Pro X, are capable of running WSL2 starting with the Windows 10 May 2020 (2004) update. Currently, Docker Desktop for Windows requires a x64 PC, so it's not possible to run Docker Desktop on these devices.

Which service(s) is this request for? Docker Desktop for Windows

Tell us about the problem you're trying to solve. What are you trying to do, and why is it hard? I'm trying to get Docker Desktop to work on my Windows on ARM (arm64) device with the WSL2 backend, but because it's x64-only, there seems to be no way for me to start using it.

Are you currently working around the issue? Windows on ARM supports emulation for 32-bit/x86 apps, but since Docker Desktop is a x64-only app, we can't benefit from emulation and seem to have absolutely no way to get Docker Desktop to run on these devices.

The only options at the moment are to remote SSH or RDP into a machine that has Docker installed and do development on there, or run Docker within WSL2 using the regular Linux installation instructions.

Additional context WSL2 general availability announcement: https://devblogs.microsoft.com/commandline/wsl2-will-be-generally-available-in-windows-10-version-2004/

dennisameling avatar May 13 '20 07:05 dennisameling

Hi, Arm lent us a Windows 10 machine a while back and I did a little testing. Docker runs fine on Arm64 WSL2 if you install it yourself (via https://get.docker.com/ ), which is great, once you have updated to a Windows version that supports WSL2.

Building Docker Desktop has a bunch of issues around software we use and available toolchains, and as you say lack of emulation for 32 bit x86. This situation should get better over time as the Windows arm64 ecosystem gets better and we update some dependencies. If other people are interested please let us know.

justincormack avatar May 13 '20 09:05 justincormack

That's great to know, thanks for the info! Will try that right after the stable version of Windows 10 2004 is released (rumor says that'll be on May 28) 🚀

dennisameling avatar May 13 '20 09:05 dennisameling

I am extremely interested in this and would love to use it to build my SQL Server containers!

SQLvariant avatar May 13 '20 15:05 SQLvariant

I have docker installed in wsl 2 but without systemd it's hard to start :-/ would sure love to have this.

taxilian avatar Jun 06 '20 00:06 taxilian

+1 for getting docker desktop running on win10 arm64. I would love this.

jeffthompsonsd avatar Jul 01 '20 02:07 jeffthompsonsd

+1 for docker desktop running on win10 arm64.

I did manage to get docker-ce running using a script inside Ubuntu 20.04 (downloaded from https://get.docker.com ). That is working well enough for now but native Docker desktop would integrate better with other stuff (for example, Visual Studio Code extensions).

dsmk avatar Jul 07 '20 15:07 dsmk

@justincormack How do you actually run it? I can install fine with the script but I cant start the docker service inside WSL2 ubuntu 20.04

time="2020-07-24T13:14:41.737173200+08:00" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc
time="2020-07-24T13:14:41.749458000+08:00" level=info msg="[graphdriver] using prior storage driver: overlay2"
time="2020-07-24T13:14:41.773593300+08:00" level=warning msg="Your kernel does not support cgroup memory limit"
time="2020-07-24T13:14:41.773643500+08:00" level=warning msg="Unable to find cpu cgroup in mounts"
time="2020-07-24T13:14:41.773660200+08:00" level=warning msg="Unable to find blkio cgroup in mounts"
time="2020-07-24T13:14:41.773672500+08:00" level=warning msg="Unable to find cpuset cgroup in mounts"
time="2020-07-24T13:14:41.773684200+08:00" level=warning msg="mountpoint for pids not found"
time="2020-07-24T13:14:41.773901200+08:00" level=info msg="Loading containers: start."
time="2020-07-24T13:14:41.839851100+08:00" level=warning msg="Running iptables --wait -t nat -L -n failed with message: `iptables v1.8.4 (legacy): can't initialize iptables table `nat': Table does not exist (do you need to insmod?)\nPerhaps iptables or your kernel needs to be upgraded.`, error: exit status 3"
time="2020-07-24T13:14:43.126110200+08:00" level=info msg="stopping event stream following graceful shutdown" error="<nil>" module=libcontainerd namespace=moby
time="2020-07-24T13:14:43.127763100+08:00" level=info msg="stopping event stream following graceful shutdown" error="context canceled" module=libcontainerd namespace=plugins.moby
time="2020-07-24T13:14:43.127776700+08:00" level=info msg="stopping healthcheck following graceful shutdown" module=libcontainerd
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables v1.8.4 (legacy): can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

goodwill avatar Jul 24 '20 05:07 goodwill

After installing docker on wsl 2 ubuntu 20.04 on ARM (surface pro x) I start it by running in WSL:

sudo /etc/init.d/docker start

works fine. I do really wish that docker desktop was supported, though.

taxilian avatar Jul 24 '20 17:07 taxilian

I tried and no this doesn't work - same error, so I don't think this is even usable for most people.

goodwill avatar Jul 28 '20 01:07 goodwill

It actually looks like something to do with the iptables behaviour in WSL2, I wonder anyone here got clue on how to fix it? Looks related to this? https://github.com/kubernetes-sigs/kind/pull/741

goodwill avatar Jul 28 '20 10:07 goodwill

@dsmk May I know if you come across any issue? Are you changing the kernel somehow to get this working?

goodwill avatar Aug 01 '20 13:08 goodwill

+1 for Docker Desktop on Windows on Arm64.

I'm not sure if it's possible to run Windows containers at the moment (maybe in Insider builds which support Hyper-V on Arm64), but WSL 2 is officially supported on Arm64, so this is already a good reason to have Docker running on it.

Now that Visual Studio Code also runs natively on Windows on Arm64, one can build a proper development environment with WSL 2 on devices like Surface Pro X.

Alovchin91 avatar Aug 19 '20 09:08 Alovchin91

Another vote for Docker Desktop on ARM64, as a Surface Pro X user.

jamesthurley avatar Sep 14 '20 09:09 jamesthurley

+1 for docker desktop running on win10 arm64.

zacfpearson avatar Sep 15 '20 18:09 zacfpearson

I'll throw a +1 on here.

just-Bri avatar Sep 15 '20 22:09 just-Bri

+1

dariobig avatar Sep 18 '20 13:09 dariobig

+1

AndrewCowle avatar Sep 24 '20 16:09 AndrewCowle

@Alovchin91 Windows containers are not currently supported on Arm Windows. You should ask Microsoft to support that, currently there are no base images available for example.

justincormack avatar Oct 07 '20 13:10 justincormack

@justincormack I don't really care about Windows containers tbh, running Linux containers on Windows on ARM would have been good enough 🙂 I know this can be done from WSL 2, but it would be nice to see Docker Desktop supporting it.

Alovchin91 avatar Oct 07 '20 13:10 Alovchin91

Give us WSL 2 support with docker desktop and we'll be happy =]

taxilian avatar Oct 07 '20 15:10 taxilian

Golang doesn't yet support building windows/arm64 binaries, and I think golang is a big part of docker desktop, so this will probably have to wait a while yet. Hoping for windows/arm64 in v1.16 of golang, which is early 2021.

rfay avatar Oct 07 '20 15:10 rfay

Tracking issue for golang: https://github.com/golang/go/issues/36439

Alovchin91 avatar Oct 07 '20 15:10 Alovchin91

Just wanted to drop in and say: I've been running docker inside of WSL2 rather than using Docker Desktop and it's been great. (This is on a a Surface Book 3). I actually prefer it to Docker Desktop on Windows, I do have to manually start the docker service, but the performance is actually much better.

I'll be trying this on ARM once I get the new Pro X with the SQ2. Even if 64 bit support is added via emulation there's no way it could compete with just running Docker natively on ARM via WSL2.

just-Bri avatar Oct 07 '20 15:10 just-Bri

+1 for Windows ARM 64 in general (Samsung Galaxy Book S)

gnubyte avatar Oct 24 '20 15:10 gnubyte

+1 for Windows on ARM (Surface Pro X). I know this could take a while, so if all we could get for now is a way to get the Docker CLI locally, but the real Docker host controlled remotely, I'd be happy. The only thing that wouldn't work well with a remote Docker host is bind mounts, but there's not much that can be done about that.

awakecoding avatar Oct 26 '20 00:10 awakecoding

Any update on this?

mannok avatar Dec 29 '20 06:12 mannok

+1 for Windows on ARM (Surface Pro X).

piotrmajdanik avatar Jan 12 '21 17:01 piotrmajdanik

+1 for Windows on ARM

ToryMakesThings avatar Jan 15 '21 18:01 ToryMakesThings

@goodwill if you have these errors when trying to start docker:

time="2020-07-24T13:14:43.126110200+08:00" level=info msg="stopping event stream following graceful shutdown" error="<nil>" module=libcontainerd namespace=moby
time="2020-07-24T13:14:43.127763100+08:00" level=info msg="stopping event stream following graceful shutdown" error="context canceled" module=libcontainerd namespace=plugins.moby
time="2020-07-24T13:14:43.127776700+08:00" level=info msg="stopping healthcheck following graceful shutdown" module=libcontainerd
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables v1.8.4 (legacy): can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

It's because of debian buster using nftables. You can fix this by running:

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

Afterwards, starting docker manually should work fine. You can try it with:

sudo dockerd

Afterwards, you can just use init.d to start it:

sudo /etc/init.d/docker start

Then it should work fine. Just try the hello world command:

sudo docker run hello-world

Rowanto avatar Jan 26 '21 11:01 Rowanto

Any progress?

It's now possible to install x86-64 version on ARM64, but that version keeps locking up and won't even switch to Windows containers on devices that don't support virtualization.

tringi avatar Mar 24 '21 21:03 tringi