Roadmap: Please support Docker Desktop (WSL2) on Windows on ARM

Created on 13 May 2020  路  40Comments  路  Source: docker/roadmap

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/

community_new docker_desktop

Most helpful comment

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.

All 40 comments

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.

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) 馃殌

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

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

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

+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).

@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.

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.

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

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

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

+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.

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

+1 for docker desktop running on win10 arm64.

I'll throw a +1 on here.

+1

+1

@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 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.

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

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.

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

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.

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

+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.

Any update on this?

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

+1 for Windows on ARM

@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

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.

Only reason why I'm not buying HP Elite Folio, docker desktop on ARM would be amazing.

You have developed Docker Desktop for ARM64 M1 macOS, you can do it for ARM64 for Windows 10... A lot learned by the way. M1 macOS has 16GB RAM as Surface Pro X with SQ1 or SQ2 have all about 3GHz processors.
When? How much pressure you need? I may live with WSL2 without Desktop, but that seems from the above issues not working well.

I no longer have my SPX but when I was using it I just installed Docker inside of WSL2 and used the CLI, it worked great.
I have never found a need to use the Docker Desktop application for anything. Currently I ssh to a cloud VM for my dev environment and do the same, have Docker installed on the VM but nothing docker related installed locally.

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.

....
@justincormack , When I try docker on Ubuntu 20.04 it is not there on Surface Pro X with WSL2 and offers installing by running:
Command 'docker' not found, but can be installed with:
sudo apt install docker.io

You recommend installing docker from the shell script at https://get.docker.com/ - what is the difference compared with the command above? (BTW my PowerShell does not recognize wsl command, but CMD command prompt does - I have no idea why). I am not an experienced Linux nor Docker user. Docker Desktop is for Windows 10 on x64, not for ARM64.

@mbalcerzyk follow these instructions https://docs.docker.com/engine/install/ubuntu/

As for powershell not knowing the WSL command I'm not sure about that.

@mbalcerzyk follow these instructions https://docs.docker.com/engine/install/ubuntu/

As for powershell not knowing the WSL command I'm not sure about that.

@reifnotreef . I did the steps described in Ubuntu link you gave, All went well, except that the hello-world does not start. Installation does not start Docker service in WSL2 Ubuntu 20.04 I suppose. I tried to start the service to have it on boot as described in https://docs.docker.com/engine/install/linux-postinstall/#configure-docker-to-start-on-boot but that did not work:
mbalcerzyk@DESKTOP-UPTUL2A:~$ sudo systemctl enable docker.service
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
mbalcerzyk@DESKTOP-UPTUL2A:~$ sudo systemctl enable containerd.service
mbalcerzyk@DESKTOP-UPTUL2A:~$ sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
mbalcerzyk@DESKTOP-UPTUL2A:~$
mbalcerzyk@DESKTOP-UPTUL2A:~$ sudo systemctl start docker
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
mbalcerzyk@DESKTOP-UPTUL2A:~$

Hello world does not start.
mbalcerzyk@DESKTOP-UPTUL2A:~$ sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
mbalcerzyk@DESKTOP-UPTUL2A:~$

systemd is not working in WSL2 in Ubuntu 20.04 as far as I know, in ARM64 Windows 10 (normal, not Insiders version) but that is beyond my knowledge.

(BTW: PowerShell wsl command works when in Windows Terminal, in normal Windows blue version, it does not).

How did you start the Docker service in WSL2?

Regards
Marcin

@mbalcerzyk WSL does not use systemd, you will have to manually start docker on boot using service commands. Not at my computer at the moment but google "sudo service docker start" and you should find what you need.

@mbalcerzyk WSL does not use systemd, you will have to manually start docker on boot using service commands. Not at my computer at the moment but google "sudo service docker start" and you should find what you need.

@reifnotreef Finally, it works, the only minor thing is that all Docker commands need to be started with sudo:
sudo docker info
sudo docker run hello-world

Here is the output:
mbalcerzyk@DESKTOP-UPTUL2A:~$ docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
ERROR: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info: dial unix /var/run/docker.sock: connect: permission denied
errors pretty printing info
mbalcerzyk@DESKTOP-UPTUL2A:~$ sudo docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.6
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 5.4.72-microsoft-standard-WSL2
Operating System: Ubuntu 20.04.2 LTS
OSType: linux
Architecture: aarch64
CPUs: 8
Total Memory: 12.13GiB
Name: DESKTOP-UPTUL2A
ID: UUSZ:UWFE:FRLH:C23N:DUSH:ISIS:QNQ5:JFIR:W4Q5:MG5B:4QJE:ULIJ
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
mbalcerzyk@DESKTOP-UPTUL2A:~$
mbalcerzyk@DESKTOP-UPTUL2A:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
256ab8fe8778: Pull complete
Digest: sha256:5122f6204b6a3596e048758cabba3c46b1c937a46b5be6225b835d091b90e46c
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

  1. The Docker client contacted the Docker daemon.
  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
  3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
  4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

mbalcerzyk@DESKTOP-UPTUL2A:~$

@mbalcerzyk look through the post-install steps for Linux/Ubuntu, it will tell you to add your user to a group. You might need to stop WSL and start it again to take affect. In Windows Terminal "wsl --shutdown" I think.

+1

Was this page helpful?
0 / 5 - 0 ratings