docker / roadmap

Welcome to the Public Roadmap for All Things Docker! We welcome your ideas.
https://github.com/orgs/docker/projects/51
Creative Commons Zero v1.0 Universal
1.74k stars 255 forks source link

Please support Docker Desktop (WSL2) on Windows on ARM #91

Open dennisameling opened 4 years ago

dennisameling commented 4 years ago

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/

justincormack commented 4 years ago

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.

dennisameling commented 4 years ago

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) 🚀

SQLvariant commented 4 years ago

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

taxilian commented 4 years ago

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

jeffthompsonsd commented 4 years ago

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

dsmk commented 4 years ago

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

goodwill commented 4 years ago

@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.
taxilian commented 4 years ago

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.

goodwill commented 4 years ago

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

goodwill commented 4 years ago

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 commented 4 years ago

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

Alovchin91 commented 4 years ago

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

jamesthurley commented 4 years ago

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

zacfpearson commented 4 years ago

+1 for docker desktop running on win10 arm64.

just-Bri commented 4 years ago

I'll throw a +1 on here.

dariobig commented 4 years ago

+1

AndrewCowle commented 4 years ago

+1

justincormack commented 3 years ago

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

Alovchin91 commented 3 years ago

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

taxilian commented 3 years ago

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

rfay commented 3 years ago

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.

Alovchin91 commented 3 years ago

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

just-Bri commented 3 years ago

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.

gnubyte commented 3 years ago

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

awakecoding commented 3 years ago

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

mannok commented 3 years ago

Any update on this?

piotrmajdanik commented 3 years ago

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

AgentGoldPaw commented 3 years ago

+1 for Windows on ARM

Rowanto commented 3 years ago

@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
tringi commented 3 years ago

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.

promaty commented 3 years ago

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

mbalcerzyk commented 3 years ago

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.

just-Bri commented 3 years ago

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.

mbalcerzyk commented 3 years ago

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.

just-Bri commented 3 years ago

@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 commented 3 years ago

@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

just-Bri commented 3 years ago

@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 commented 3 years ago

@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:~$

just-Bri commented 3 years ago

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

maxboone commented 3 years ago

+1

tim-oleksii commented 3 years ago

Golang support of windows aarch64 is delivered. https://github.com/golang/go/issues/36439

next move is for docker

Currently it's impossible to run setup of Windows on Ampere Altra with Docker.

tim-oleksii commented 3 years ago

Golang 1.17 is released with Windows on ARM64 support. https://blog.golang.org/go1.17

Is there any ETA for docker?

matze19999 commented 3 years ago

+1 for Docker Desktop for ARM64 as a SPX user.

chaitanya9186 commented 3 years ago

+1 for Docker Desktop for ARM64 too

mannok commented 3 years ago

+1 for Docker Desktop for ARM64 too

thecloudranger commented 3 years ago

+1 for Docker Desktop on Windows 10 ARM64.

CyberSecDemon commented 2 years ago

Wow this is still an issue? Amazing an Enterprise grade product like this would just not support ARM...

awakecoding commented 2 years ago

Another possibility to get support for containers in WSL2 on Windows ARM64 could be through Rancher Desktop instead of Docker Desktop, it may be worth opening a feature request: https://github.com/rancher-sandbox/rancher-desktop/issues/566

bledMS82 commented 2 years ago

Please support Docker Desktop (WSL2) on Windows on ARM! BUMP

servako commented 2 years ago

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