DEV Community

Cover image for Start Podman on WSL2 in 4 steps
Thang Chung
Thang Chung

Posted on

Start Podman on WSL2 in 4 steps

Everyone works with Linux or Mac in every development project nowadays. And with that way, Podman on these systems might be easy to get started and we only keep focusing on what can we deliver.

But the question is if you have to work with a Windows environment and WSL2 underline, then what can we do if we still want to use Podman (replace for Docker) on that box?

I have read a lot of articles to bring up the Podman to Windows + WSL2 but to be honest, we have to handle a lot of exceptional cases. It might work or might not, and I don't really sure.

So that I write down some tips and tricks to get it to work on my Windows 11 + WSL2 (Ubuntu 20) so that everyone else can have a reference to set up the containerized environment to develop the container driven application.

Get starting with 4 simple steps that I have to run on every daily basis to have Podman run with me first. Subsequently, we will deep dive into how can we install the package and works to Podman on Windows

Step 1: Start the Podman machine

Let's run your Ubuntu box (WSL2) and type

> podman machine start
Enter fullscreen mode Exit fullscreen mode

You will get an error like

INFO[0000] waiting for clients...
INFO[0000] listening tcp://0.0.0.0:7777
INFO[0000] new connection from @ to /mnt/wslg/runtime-dir/podman/qemu_podman-machine-default.sock
Waiting for VM ...
Could not access KVM kernel module: Permission denied
qemu-system-x86_64: failed to initialize KVM: Permission denied
Error: dial unix /mnt/wslg/runtime-dir/podman/podman-machine-default_ready.sock: connect: connection refused
ERRO[0003] cannot receive packets from @, disconnecting: cannot read size from socket: EOF
Enter fullscreen mode Exit fullscreen mode

Okay, after searching around Google, I have found the solution to make it work

> sudo chmod 666 /dev/kvm
Enter fullscreen mode Exit fullscreen mode

Then, run the command above again

> podman machine start
Enter fullscreen mode Exit fullscreen mode

It should work, and you should see the message as follows

INFO[0000] waiting for clients...
INFO[0000] listening tcp://0.0.0.0:7777
INFO[0000] new connection from @ to /mnt/wslg/runtime-dir/podman/qemu_podman-machine-default.sock
Waiting for VM ...
Machine "podman-machine-default" started successfully
Enter fullscreen mode Exit fullscreen mode

Step 2: Start ssh service on Ubuntu

Type the command

$ sudo service ssh start
Enter fullscreen mode Exit fullscreen mode

You should see

 * Starting OpenBSD Secure Shell server sshd
Enter fullscreen mode Exit fullscreen mode

Step 3: Podman to bind the Unix socket so that the remote client can connect to

Run the command below

> podman system service --time=0 unix:///mnt/wslg/runtime-dir/podman/podman.sock
Enter fullscreen mode Exit fullscreen mode

Step 4: Connect to Podman by using Podman remote client from Windows 11

> podman system connection add wsl --identity C:\Users\<your username>\.ssh\id_rsa_localhost ssh://<your username>@localhost/mnt/wslg/runtime-dir/podman/podman.sock
Enter fullscreen mode Exit fullscreen mode

Then

> podman images
Enter fullscreen mode Exit fullscreen mode

You should see

REPOSITORY                         TAG                    IMAGE ID      CREATED        SIZE
docker.io/library/postgres         11                     798225d02ad1  4 weeks ago    290 MB
docker.io/library/postgres         12                     afee8d9d57fc  4 weeks ago    379 MB
mcr.microsoft.com/dotnet/sdk       6.0                    e86d68dca8c7  4 weeks ago    725 MB
mcr.microsoft.com/dotnet/core/sdk  3.1                    e192c0c19af6  4 weeks ago    723 MB
docker.io/library/rabbitmq         3.8-management-alpine  a2fdbd753a1f  5 weeks ago    178 MB
docker.io/library/golang           1.17.3-buster          08f6df476f80  6 weeks ago    906 MB
docker.io/openpolicyagent/opa      0.35.0                 4a700ccbe0c6  7 weeks ago    72.9 MB
docker.io/library/postgres         11-alpine              4566dfb4cdeb  7 weeks ago    205 MB
docker.io/library/postgres         12-alpine              7c35a1e9b20d  7 weeks ago    207 MB
docker.io/library/hello-world      latest                 feb5d9fea6a5  3 months ago   19.9 kB
docker.io/library/redis            6.2.5-alpine           f6f2296798e9  4 months ago   33.5 MB
docker.io/openzipkin/zipkin        2.22.1                 ecad87b22fa0  14 months ago  148 MB
docker.io/mailhog/mailhog          v1.0.1                 4de68494cd0d  17 months ago  401 MB
Enter fullscreen mode Exit fullscreen mode

That is what I have to do every do day when I want to get started in the Podman development environment.

Setup Podman on Ubuntu 20 (WSL2) step by step

Preparation your WSL2 with Ubuntu 20

> wsl # make sure you have WSL2 run on your machine
Enter fullscreen mode Exit fullscreen mode

If you don't have WSL2 on your machine, please go to https://docs.microsoft.com/en-us/windows/wsl/install

Then you can run

> wsl --list
Enter fullscreen mode Exit fullscreen mode

You should see

Windows Subsystem for Linux Distributions:
Ubuntu-20.04 (Default)
docker-desktop
docker-desktop-data
Enter fullscreen mode Exit fullscreen mode

If you don't have Ubuntu-20.04, then you can have it by following the guidance at https://www.omgubuntu.co.uk/how-to-install-wsl2-on-windows-10

That's cool. You are ready for this journey!

Jump into Ubuntu box and prepare Podman stuff

> export NAME=xUbuntu
> export VERSION_ID=20.04
> export WINDOWS_HOME=/mnt/c/Users/<yourUserNameHere>
Enter fullscreen mode Exit fullscreen mode

The follow up with the guidance from Podman site to install it into Ubuntu

$ apt update
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/${NAME}_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
> wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/${NAME}_${VERSION_ID}/Release.key -O Release.key
$ sudo apt-key add - < Release.key
$ sudo apt-get update -qq
$ sudo apt-get -qq -y install podman
$ sudo mkdir -p /etc/containers
> echo -e "[registries.search]\nregistries = ['docker.io', 'quay.io']" | sudo tee /etc/containers/registries.conf
Enter fullscreen mode Exit fullscreen mode

Run > podman info, you should see Podman server information.

Prepare a user and group for Podman on Ubuntu

$ sudo groupadd podman -g 2000
$ sudo useradd podman -u 2000 -g 2000
# add your user to podman group
$ sudo usermod -a -G podman $USER
Enter fullscreen mode Exit fullscreen mode

Install OpenSSH on WSL and generate keys

$ sudo apt-get -qq -y install openssh-server
$ sudo service ssh start
Enter fullscreen mode Exit fullscreen mode

Then, we can generate the keys as follows

> export WINDOWS_HOME=/mnt/c/Users/<you windows username>/
> ssh-keygen -b 2048 -t rsa -f $WINDOWS_HOME/.ssh/id_rsa_localhost -q -N ""
> mkdir ~/.ssh
> cat $WINDOWS_HOME/.ssh/id_rsa_localhost.pub >> ~/.ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

Sometimes, you have got the error message sshd: no hostkeys available -- exiting, please follow the guidance at https://www.garron.me/en/linux/sshd-no-hostkeys-available-exiting.html to solve it.

Install quemu and gvproxy

> apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
Enter fullscreen mode Exit fullscreen mode

When you start Podman, and you have got the error

Error: unable to start host networking: "could not find \"gvproxy\" in one of [/usr/local/opt/podman/libexec /opt/homebrew/bin /opt/homebrew/opt/podman/libexec /usr/local/bin /usr/local/libexec/podman /usr/local/lib/podman /usr/libexec/podman /usr/lib/podman]"
Enter fullscreen mode Exit fullscreen mode

Then, you have to install gvproxy on your machine. Download it at gvproxy, then extract and put it into /usr/local/libexec/podman. Next step, you open up ~/.config/containers/containers.conf, and add

helper_binaries_dir = ["/usr/local/libexec/podman"]
Enter fullscreen mode Exit fullscreen mode

Run the > podman machine start again, and you should be able to start this machine.

After finishing these setups, then every time we boost up the WSL2 with Ubuntu 20 distro, we can just follow 4 simple steps in this article to get starting your environment. Happy hacking!

Notes: We have several discussions about how to get Podman works on Windows + WSL2 (Ubuntu 20 distro) at:

Other References:

This article is copied from https://hashnode.com/post/start-podman-on-wsl2-in-4-steps-ckyo3xwgk090wels1don39l7k

Discussion (0)