In this quick article we will be discussing how to start podman containers on boot. If you are used to Docker, it may come as a surprise that this is not so simple with podman. Don't fret, we will show you how to start your podman containers at boot with systemd units in just a few easy steps.
Create and Start Your Podman Container
The first step is to create and start your container. Creating containers is outside the scope of this tutorial, but if you are here chances are you have this step done already.
For this example I will be using the unifi controller that I have running in a podman container. This is a perfect use case since I need this controller running at all times.
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c23d1c116c00 docker.io/jacobalberty/unifi:latest unifi 18 minutes ago Up 18 minutes ago 10.0.0.5:8080->8080/tcp, 10.0.0.5:8443->8443/tcp, 10.0.0.5:3478->3478/udp, 10.0.0.5:10001->10001/udp unifi
Now that I have my container configured and running, let's create a systemd unit file.
Create a Systemd Service Unit from the Podman Container
Podman makes it simple to create a systemd unit file for your containers with podman generate
. Let's use it to generate the service unit file. Below is an example command, you will need to change unifi
to the name of your container.
podman generate systemd --new --name unifi
Here is an example output from the above command:
Now that we know how to generate the unit file, let's move it to the correct location and get systemd working with it.
To do this, I used simple redirection. You can use the --files
option if you like.
podman generate systemd --new --name unifi > ~/.config/systemd/user/unifi.service
Here we redirected the generated file into ~/.config/systemd/user/unifi.service
which is a location for user generate unit files. Now that we have the service unit file generated we can configure the service to start out podman container on boot.
Set SELinux Context and Permissions of New Unit File
Set the permissions of the new file. It does not (should not) need to be executable.
chmod 644 ~/.config/systemd/user/unifi.service
Now ensure SELinux has the correct context for the file. If you are not using SELinux you can skip this.
restorecon ~/.config/systemd/user/unifi.service
Enable Your New Systemd Service to Start Podman Container on Boot
First let's tell systemd that we created a new service unit.
systemctl --user daemon-reload
Now that systemd has read the new file, you can enable the service just like any other daemon/service.
systemctl --user enable unifi.service
Remember to use the name of the service you created, not unifi.
Once you have it enabled, you can use systemctl to check the status of the new service unit.
systemctl --user status unifi.service
Here is an example. Notice the third line where is says "enabled". This means the service is enabled to start at boot.
[savona@fenrir user]$ systemctl --user status unifi.service
● unifi.service - Podman container-unifi.service
Loaded: loaded (/home/savona/.config/systemd/user/unifi.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-03-11 13:25:15 EST; 35min ago
Docs: man:podman-generate-systemd(1)
Process: 3930 ExecStartPre=/bin/rm -f /run/user/1000/unifi.service.ctr-id (code=exited, status=0/SUCCESS)
Main PID: 4126 (conmon)
That's it! You can now do a reboot and test your new service unit. In just three easy steps we are now able to start podman containers on boot.
Links and Resources
Join Our Newsletter
Categories
- Bash Scripting (17)
- Basic Commands (51)
- Featured (7)
- Just for Fun (5)
- Linux Quick Tips (98)
- Linux Tutorials (65)
- Miscellaneous (15)
- Network Tools (6)
- Reviews (2)
- Security (32)