Podman, atau Pod Manager, adalah alat native Linux untuk membangun dan menjalankan aplikasi terkontainerisasi, termasuk pods dan volumes, pada sebuah server.
Tidak seperti Docker, Podman bersifat daemon-less, artinya tidak memerlukan service terpisah untuk berjalan dan membantu mengurangi attack surface pada aplikasi berbasis kontainer.
Dalam menjalankan container dan mengelola image, Podman memanfaatkan libpod serta berbagai runtime OCI seperti runc, crun, dan runv.
Instal Podman #
Instal paket Podman menggunakan DNF:
dnf -y install podman
Verifikasi #
podman --version
Contoh output:
podman version 4.9.4-rhel
Instal Docker Compose Plugin #
Docker Compose Plugin dapat digunakan bersama Podman sebagai penyedia compose provider.
Tambahkan repository Docker untuk RHEL:
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
Instal plugin:
dnf -y install docker-compose-plugin
Verifikasi #
podman compose --version
Contoh output:
>>>> Executing external compose provider "/usr/libexec/docker/cli-plugins/docker-compose". Please refer to the documentation for details. <<<<
Docker Compose version v2.40.3
Buat file docker-compose.yml di dalam folder project dan isi dengan contoh berikut.
services:
db:
image: docker.io/library/mariadb
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_USER: alma
MYSQL_PASSWORD: password
MYSQL_DATABASE: alma_db
ports:
- "3306:3306"
web:
image: docker.io/library/nginx:alpine
ports:
- "80:80"
Jalankan docker compose.
podman compose up -d
Cek status container.
podman compose ps
Podman: Dockerfile (Podman Build) #
Buat file Dockerfile di dalam folder project:
nano Dockerfile
Isi dengan contoh berikut untuk membuat image berbasis nginx:alpine dan memodifikasi konten index.html:
FROM nginx:alpine
RUN echo "Dockerfile Test on Nginx" > /usr/share/nginx/html/index.html
Jalankan perintah berikut untuk melakukan build image:
podman build -t test-nginx .
Parameter:
-t test-nginx→ memberi nama/tag pada image.→ build context berada pada direktori saat ini
Setelah proses build selesai, cek daftar image yang tersedia:
podman images
Contoh output:
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/test-nginx latest c5c8753cbc67 57 minutes ago 54.2 MB
docker.io/library/nginx alpine d4918ca78576 3 weeks ago 54.3 MB
Jalankan container dengan image yang baru dibuat:
podman run -dit --name nginx -p 80:80 localhost/test-nginx
Keterangan:
-d→ berjalan di background-i/-t→ allocate interactive tty--name nginx→ memberi nama container-p 80:80→ memetakan port host 80 ke container 80
Verifikasi #
Test akses menggunakan curl:
curl localhost
Contoh output:
Dockerfile Test on Nginx
Troubleshooting Umum #
Bagian ini membantu mengatasi kendala yang sering muncul setelah instalasi Podman atau Docker Compose Plugin.
Podman tidak dapat menarik (pull) image #
Gejala:
Error: initializing source docker://...: pinging container registry: ...
Penyebab Umum:
- DNS server bermasalah
- Akses outbound diblokir firewall
- Repository container sedang bermasalah
Solusi:
-
Ganti DNS resolver, misalnya Cloudflare/Google:
echo -e "nameserver 1.1.1.1\nnameserver 8.8.8.8" > /etc/resolv.conf -
Pastikan firewall mengizinkan port outbound 443.
-
Coba ulang beberapa menit kemudian jika registry sedang bermasalah.
Podman rootless tidak berjalan #
Gejala: Podman tidak dapat mengeksekusi container mode non-root.
Solusi: Pastikan subuid dan subgid sudah diatur:
cat /etc/subuid
cat /etc/subgid
Jika kosong, isi:
usermod --add-subuids 100000-165535 USERNAME
usermod --add-subgids 100000-165535 USERNAME
Set cgroup manager ke systemd secara eksplisit. Tambahkan di ~/.config/containers/containers.conf
[engine]
cgroup_manager = "systemd"
Restart session systemd user.
systemctl --user daemon-reexec
systemctl --user daemon-reload
systemctl --user enable --now podman.service
systemctl --user enable --now podman.socket
Cek apakah podman membaca config.
podman info | grep -A3 'cgroupManager'
Podman compose error: “Cannot find docker-compose” #
Penyebab: Podman compose membutuhkan external provider (docker-compose plugin).
Solusi: Pastikan plugin berada di path yang benar:
ls /usr/libexec/docker/cli-plugins/docker-compose
Jika tidak ada, reinstall:
dnf -y reinstall docker-compose-plugin
Podman compose error: “tmp containers-user exist” #
Gejala: Terkadang direktori /tmp/containers-user-1000/ dan /tmp/podman-run-1000 tidak dibersihkan setelah server di reboot sehingga membuat eksekusi podman compose up -d menjadi gagal.
Solusi:
Gunakan systemd tmpfiles untuk auto-clean. Tambahkan aturan di /etc/tmpfiles.d/podman.conf:
# Bersihkan direktori Podman rootless saat boot
R /tmp/containers-user-1000 - - - -
R /tmp/podman-run-1000 - - - -
Lalu reload.
systemd-tmpfiles --create
Podman tidak dapat memulai container karena SELinux #
Gejala: container gagal start, log menunjukkan permission denied atau policy violation.
Solusi cepat (aman untuk pengujian):
setenforce 0
Solusi permanen rekomendasi: gunakan label :Z atau :z pada volume.
Contoh:
podman run -v /data/app:/app:Z imagename
Error: “overlayfs: failed to mount” #
Penyebab: Filesystem host tidak mendukung d_type=true.
Solusi: Cek filesystem:
xfs_info / | grep ftype
Jika hasil ftype=0, maka XFS tidak kompatibel → solusinya harus reformat partisi dengan ftype=1.
(Ini adalah batasan pada XFS kernel-level.)
Docker Compose tidak bisa jalan walaupun plugin sudah terpasang #
Gejala:
podman-compose: command not found
docker-compose: command not found
Solusi: Gunakan:
podman compose up -d
Karena plugin yang dipasang bukan podman-compose (Python version), melainkan Docker Compose CLI plugin.
Container mati setelah logout user #
Gejala:
- Container yang dijalankan dengan rootless Podman berhenti berjalan setelah user logout.
- Hal ini terjadi karena rootless Podman bergantung pada session manager (systemd user session).
Solusi: Mengaktifkan Systemd Linger
Agar systemd tetap menjaga user service tetap aktif walaupun user sudah logout, aktifkan fitur linger untuk user tersebut.
sudo loginctl enable-linger <username>
Setelah mengaktifkan linger, cek dengan:
loginctl show-user <username> | grep Linger
Output seharusnya:
Linger=yes