My FeedDiscussionsHeadless CMS
New
Sign in
Log inSign up
Learn more about Hashnode Headless CMSHashnode Headless CMS
Collaborate seamlessly with Hashnode Headless CMS for Enterprise.
Upgrade ✨Learn more
Start Podman on WSL2 in 4 steps

Start Podman on WSL2 in 4 steps

Thang Chung's photo
Thang Chung
·Jan 21, 2022·

5 min read

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

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

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

> sudo chmod 666 /dev/kvm

Then, run the command above again

> podman machine start

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

Step 2: Start ssh service on Ubuntu

Type the command

$ sudo service ssh start

You should see

 * Starting OpenBSD Secure Shell server sshd

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

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

Then

> podman images

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

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

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

Then you can run

> wsl --list

You should see

Windows Subsystem for Linux Distributions:
Ubuntu-20.04 (Default)
docker-desktop
docker-desktop-data

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

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>

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

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

Install OpenSSH on WSL and generate keys

$ sudo apt-get -qq -y install openssh-server
$ sudo service ssh start

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

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

Install quemu and gvproxy

> apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

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]"

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"]

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: