Skip to main content

Mac Connecting to Windows Docker: Using ZeroTier to Connect Mac to WSL2 Docker on Windows 10

1. Background​

Even the top-spec M1 MacBook only has 16GB RAM, which is tight for running VMs. But I wanted to develop on the M1-optimized JDK - projects that used to take 2 minutes to start now only take 20 seconds, which is incredibly tempting.

So why not use my 32GB Windows PC at home as a dedicated Docker server, while using the MacBook for development and remotely connecting to Docker on Windows?

2. Install WSL2 on Windows​

Tutorial: Windows Subsystem for Linux Installation Guide (Windows 10)

After installation, open PowerShell and type wsl to enter WSL.

3. Install Docker on WSL2​

Before installing, first change the package mirror source - otherwise downloads will be painfully slow.

3.1 Change Package Mirror Source​

One command does it, from: http://mirrors.ustc.edu.cn/help/ubuntu.html

sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

3.2 Install Docker​

Ubuntu Docker Installation

After installation, when starting you'll see: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

This is because the Docker service hasn't started yet. Since this is Docker installed on Ubuntu, start it with:

sudo service docker start

Now docker ps -a should show no images.

I'll build a Jenkins image to complete the remaining steps - Jenkins opens port 8080 on startup, so I can verify connectivity from Mac's browser using ip+port.

3.3 Install Jenkins via Docker​

  • Create a Dockerfile with the following content:
FROM jenkins/jenkins:2.289.3-lts-jdk11
USER root
RUN apt-get update && apt-get install -y apt-transport-https \
ca-certificates curl gnupg2 \
software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN apt-key fingerprint 0EBFCD88
RUN add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable"
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.24.7 docker-workflow:1.26"

Build a new Docker image from this Dockerfile with a meaningful name like "myjenkins-blueocean:1.1":

docker build -t myjenkins-blueocean:1.1 .

Don't forget the "." at the end!

Run your myjenkins-blueocean:1.1 image as a container:

docker run \
--name jenkins-blueocean \
--detach \
--env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client \
--env DOCKER_TLS_VERIFY=1 \
--publish 8080:8080 \
--publish 50000:50000 \
--volume jenkins-data:/var/jenkins_home \
--volume jenkins-docker-certs:/certs/client:ro \
myjenkins-blueocean:1.1

If this command has issues, try removing the \ and executing.

After installation, accessing http://127.0.0.1:8080 should show:

image.png

This confirms Docker on WSL2 is working.

4. Install SSH on WSL2​

Ubuntu doesn't include SSH server and client by default, so you need to install them.

4.1 Install via apt​

apt-get update
sudo apt-get install openssh-server

After installation, start the service:

sudo service ssh start
sudo /etc/init.d/ssh start

Test:

ssh <username>@<ip>

It probably won't work, showing 'Permission denied (publickey)'

4.2 Fixing 'Permission denied (publickey)'​

In /etc/ssh/sshd_config, change PasswordAuthentication no to PasswordAuthentication yes

Then restart SSH:

/etc/init.d/ssh restart

Connection should work now.

5. Install ZeroTier​

ZeroTier is a network tunneling tool. First, register an account on their website.

After logging in, you'll see:

image.png

The circled NETWORK ID is what your Mac and WSL will join.

Find the download page:

image.png

Enter this command in WSL:

curl -s https://install.zerotier.com | sudo bash

After installation, join the network:

sudo zerotier-cli join ################(networkid)

You might get an error: zerotier-cli: missing port and zerotier-one.port not found in /var/lib/zerot

5.1 Fixing zerotier-cli: missing port and zerotier-one.port not found in /var/lib/zerot​

Just enter:

zerotier-one -d

Then rejoin your network.

After completion, go to the ZeroTier web page and authorize your new device:

image.png

6. Install ZeroTier on Mac​

This is even simpler - install and join the network: image.png

6.1 Try Connecting via Mac Terminal​

Open Terminal, then create a new remote connection: image.png

image.png

image.png

6.2 Test Access to WSL Service on Windows - Open Browser​

Enter the ZeroTier-assigned IP for WSL + port: image.png

If you've reached this step, congratulations - you've completed all the operations!