Features
- The
podman pushcommand now supports a new option,--platform, which selects and pushes a single platform-specific manifest instead of the entire list. - The
podman kube playcommand now supports a new option,--validate, which determines how unrecognized YAML fields are handled (#18332). - The
podman kube playcommand now supports a new option,--label, to set labels on created containers, pods, volumes, and secrets (#26450). - The
podman kube playcommand can now create multiple pods if more than 1 replica is requested by a deployment using the new--multiple-podsoption (#26769). - The
podman kube play --buildcommand now supports building images from subdirectories of the main context directory (#28148). - Quadlet
.containerfiles now support a new key,Umask, to set the default umask for the created container (#25278). - All Quadlet files now support a new key,
SetMountsDependency, configuring whether the generated unit will useRequiresMountsFor,WantsMountsFor, or no dependency at all on required source paths (#29946). - The
podman farm listcommand now supports two new options,--quiet, which will print only the names of active farms, and--noheading, which omits column headers from the output. - The
podman artifact lscommand now supports two new options,--format=json, which will output machine-readable JSON, and--quiet, which prints only artifact digests. - The
podman createcommand now supports a new option,--passwd, to add entries to/etc/passwdin the container (this has previously been available withpodman run). - The
podman infocommand now includes detailed information on the features supported by OCI runtimes. - The
podman events --filtercommand now supports a new filter,network=, to filter to events pertaining to a specific network (#29387). - The
podman auto-updatecommand has been enabled on the remote Podman client. - The
StartIntervalfield in image healthcheck configuration is now respected, allowing images to configure startup healthchecks (#27724). - The
podman image scpcommand now supports two new options,--compression-formatand--compression-level, to compress data during transfer (#23192). - The
podman auto-updatecommand now supports a new option,--filter, to selectively update only containers that match the given filters. - The
podman ps --sortcommand now allows sorting by pod. - The
podman ps --filtercommand now supports a new filter,status!, which matches containers not in the given state (#21398).
Changes
- Podman now requires Go v1.26 or higher to build.
- The
podman kube playcommand now uses thesecurityContext.seccompProfilefields in Kubernetes YAML for Seccomp configuration. Support for the existing annotation-based configuration of Seccomp is now deprecated, and will be removed with Podman 7.0. - The
podman inspectcommand on containers now includes three new fields,DNSNames(containing all names the container can be accessed via),IsInitCtr(whether the container is an init container), andInitContainerType(what type of init container this is, if it is one) (#29811). - The
podman inspectcommand on containers now only includes user-added DNS aliases in theAliasesfield, which previously displayed all DNS aliases, improving Docker compatibility. - The
podman inspectcommand on containers now properly populates theConsoleSizefield for running containers (#28368). - Systemd units created by Podman healthchecks are now named much more clearly (
libpod-healthcheck-$CONTAINERID-$randsuffix.service) (#29373). - Signal proxying is now enabled for attached
podman execcommands. As such, killing apodman execcommand with Control-C or similar should now also kill the processes started in the container (similar to howpodman runalready works) (#19486). - The deprecated
--cpu-rt-periodand--cpu-rt-runtimeoptions forpodman create,podman run,podman update, andpodman container cloneare now hidden and undocumented. They have not been functional since the removal of cgroups v1 support and will be removed entirely in Podman v7. - The
--health-startup-intervaloption topodman create,podman run, andpodman updatehas a new alias,--health-start-interval. - When a startup healthcheck interval is specified, but no startup healthcheck command, the standard healthcheck command will be used instead.
- When using the
journaldevent driver, timestamps are no longer included in logged events, asjournaldincludes a timestamp already (#29835). - Quadlet can now create template instances from instance-specific drop-in directories without requiring an explicit instance file or symlink (#27636).
Bugfixes
- Fixed a bug where passing an empty file to the
--ignorefileoption topodman buildwould cause the.dockerignoreor.containerignorefile in the context directory to be used, instead of not using an ignorefile at all (#25147). - Fixed a bug where the
Pod=key in Quadlet.containerfiles did not expand the%Nspecifier (#29108). - Fixed a bug where containers created with
--userns=autowould report having aprivateuser namespace inpodman inspectafter they started, but not when they were first created. - Fixed a bug where logging was configured too late in the Podman init process to print errors from parsing configuration files (#25362).
- Fixed a bug where the
podman system prune --buildcommand could fail if a build container was removed while it was running. - Fixed a bug where
copyevents frompodman machine cpwere not properly displayed by the remote Podman client. - Fixed a bug where the
podman farm build --tagcommand would fail if given a tag including a colon (#25039). - Fixed a bug where the
podman machine init --imagecommand would fail when given a read-only disk image. - Fixed a bug where the
podman machine startandpodman machine init --nowcommands could hang on Windows systems using the Hyper-V provider if the VM failed to start (#29455). - Fixed a bug where the
podman machine startcommand on Windows (both Hyper-V and WSL providers) would sometimes fail due to leftover processes from previous machines (#29474). - Fixed a bug where the
podman machine startcommand could hang indefinitely if the VM failed to start properly (#29880). - Fixed a bug where the
podman machine startcommand could create a VM that cannot be connected to on Windows if the host was shut down or restarted when the VM was running (#29971). - Fixed a bug where the
podman machine initcommand on Windows when using the Hyper-V provider did not correctly detach the file server process, causing VMs to lose access to host shares when the console that ranpodman machine initclosed (#29573). - Fixed a bug where the
podman kube playcommand incorrectly handledemptyDirvolumes withmedium: Memory, causing them to not be shared between containers in the pod and to ignore thesizeLimitparameter (#29555). - Fixed a bug where the remote Podman client's
podman kube playcommand incorrectly handled authentication credentials in API requests. - Fixed a bug where volumes created by the
podman volume importcommand would not adjust their permissions on being mounted into a container (#25442). - Fixed a bug where the
podman buildcommand could leak temporary directories if a build failed (#22642). - Fixed a bug where containers created with
--userns=keep-idwould use an image-specified user instead of forcing the same UID/GID in use on the host (#29600). - Fixed a bug where the remote Podman client could not function when connecting over SSH to a server which does not support the direct-streamlocal channel type (#27814).
- Fixed a bug where the remote Podman client's
podman push,podman artifact push, andpodman manifest pushcommands would push an unsigned image instead of failing when the--sign-byor--sign-by-sigstore-private-keyoptions were used. - Fixed a bug where creating a container with
--userns=autothat had overlay volume mounts would fail (#28758). - Fixed a bug where volume subpaths including a
=character in the path were handled incorrectly. - Fixed a bug where the remote Podman client was unable to add subjects to artifacts with the
podman manifest annotate --subjectandpodman manifest add --artifact subjectcommands. - Fixed a bug where the remote Podman client's
podman manifest add --artifactcommand could hang under some circumstances. - Fixed a bug where the
podman manifest annotate --os-featurescommand did not properly save the OS features in the manifest. - Fixed a bug where the remote Podman client's
podman image prune --filterdid not correctly handle filters with values including the=character. - Fixed a bug where Quadlet
.volumeunits did not recreate the volume if it was removed in Podman (#27862). - Fixed a bug where containers with a failing startup healthcheck would not immediately transition to unhealthy when the startup period ended.
- Fixed a bug where containers started with
--sdnotify=healthyand aHealthStartPeriodlonger than the unit'sTimeoutStartSeccould be automatically killed by systemd if the healthcheck took an extended period to become healthy (#27290). - Fixed a bug where the
--pids-limit=0argument topodman runandpodman createwas incorrectly setting a process limit, instead of removing the limit, when theruncOCI runtime was in use (#29826). - Fixed a bug where Quadlet did not search the parent directory of symlinked unit files for drop-in configuration files, which broke using Quadlets defined by root as a rootless user if drop-in overrides were in use (#29821).
- Fixed a bug where the
podman psandpodman pod pscommands would fail when the--formatargument was used with a format string including.Label(#29831). - Fixed a bug where the
podman cpcommand did not respect volume subpaths when copying into a mounted named or image volumes in a container that is not running (#29840 and #29857). - Fixed a bug where volume plugins were initialized when they were not required, which could cause early-boot containers started by Quadlet to error on missing plugins that the container was not actually using (#28110).
- Fixed a bug where the
podman exportcommand, when run by a rootless user on a container created with--userns=keep-id, would create an archive with incorrect UIDs and GIDs (#29856). - Fixed a bug where the
podman system servicecommand would fail to start when run as a systemd unit and autostarted at the same time as other Podman units (#29964). - Fixed a bug where the
podman eventscommand would return incomplete output when using thefileevents backend and--untilspecified with a time in the past (#29579). - Fixed a bug where the
podman updatecommand allowed setting a startup healthcheck on a container without a normal healthcheck. - Fixed a bug where the remote Podman client's
podman secret rmcommand would fail when given an ambiguous name that could match multiple possible secrets. - Fixed a bug where the
podman machine infocommand would report the default VM type and config/image directories, not those used by the current machine. - Fixed a bug where the
podman inspectcommand on containers did not includeCheckpointLogafter a failed container checkpoint (#25154).
API
- The Libpod API now features a new endpoint,
POST /libpod/autoupdate, which automatically updates containers with theio.containers.autoupdatelabel. - The Compat API now features a new endpoint,
GET /distribution/{name}/json, which inspects an image on a registry (#17726). - The Compat Create endpoint for Containers now supports a new field,
HostConfig.Mounts.TmpfsOptions.Options, to set additional options for tmpfs mounts. - The Compat Create endpoint for Containers now allows a full Seccomp profile to be passed in the
HostConfig.SecurityOptfield (instead of a path to a file containing a profile), improving Docker compatibility (#27710). - The Compat Push endpoint for Images now supports a new query parameter,
platform, to push only a single platform-specific manifest instead of the entire list. - The Compat Info endpoint now includes the status of active OCI runtimes.
- Fixed a bug where the Libpod Create endpoint for Containers required that the
autouserns mode also specify full UID/GID mappings for the created container. - Fixed a bug where the Compat Create endpoint for Containers would incorrectly adjust mode when setting tmpfs size.
- Fixed a bug where the Compat Create endpoint for Containers would incorrectly treat a healthcheck of
{}as the user explicitly requesting no healthcheck, instead of using the image's healthcheck as Docker does (#29467). - Fixed a bug where the Compat Inspect endpoint for Secrets allowed the
showsecretquery parameter, which should be restricted to Libpod API requests only (#29570). - Fixed a bug where the Compat Inspect endpoint for Images included the
Createdfield even when it was empty. - Fixed a bug where the Compat List and Inspect endpoints for Networks did not include
IPRangein the returnedIPAMConfig(#28378). - Fixed a bug where the Compat List endpoint for Containers would error when passed a filter including container statuses supported by Docker but not Podman (
deadandrestarting) (#28904). - Fixed a bug where the Compat Stats endpoint for Containers could panic on containers with a memory reservation, but no memory limit, set (#29627).
- Fixed a bug where the Compat Stats endpoint for Containers incorrectly populated
system_cpu_usageandpercpu_statswhen not streaming (#28761, #24730, #25709, #29912). - Fixed a bug where the Compat Info endpoint reported an incorrect cgroup manager when running rootless with the
cgroupfscgroup manager (#27824). - Fixed a bug where the Compat and Libpod Attach endpoints for Containers would, when doing a logs-only (
stream=0andlogs=1) attach, incorrectly reinitialize the container, changing its exit code and status (#29664). - Fixed a bug where the Compat and Libpod Update endpoints would incorrectly clear a container's restart policy when it was omitted from the request (#29790).
- Fixed a bug where the Compat and Libpod Start endpoints for Exec sessions would return an error when trying to start an exec session with no standard streams attached without specifying
Detach=true. - Fixed a bug where the Libpod Generate Kube endpoint returned the wrong content type (#29674).
- Numerous fixes to the API's Swagger documentation have been made to ensure it accurately documents the REST API.
Misc
- Fixed a number of low-level resource leaks in various parts of Podman.
- Waiting for
gvproxyto start when starting apodman machineVM now uses a notification socket, instead of polling, improving reliability and startup time. - Updated documentation for the
--image-volumeoption topodman createandpodman runto remove the deprecatedbindoption and add the new default,anonymous, which was not shown as a valid option. Using the deprecatedbindoption now prints a warning.