Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
podman-run(1)		    General Commands Manual		 podman-run(1)

NAME
       podman-run - Run	a command in a new container

SYNOPSIS
       podman run [options] image [command [arg	...]]

       podman container	run [options] image [command [arg ...]]

DESCRIPTION
       Run  a process in a new container. podman run starts a process with its
       own file	system,	its own	networking, and	its own	isolated process tree.
       The image which starts the process may define defaults related  to  the
       process	that  will  be run in the container, the networking to expose,
       and more, but podman run	gives final control to the operator or	admin-
       istrator	 who starts the	container from the image. For that reason pod-
       man run has more	options	than any other Podman command.

       If the image is not already loaded then podman run will pull the	image,
       and all image dependencies, from	the repository in the same way running
       podman pull image, before it starts the container from that image.

       Several files will be automatically created within the container. These
       include /etc/hosts, /etc/hostname, and /etc/resolv.conf to manage  net-
       working.	  These	 will  be  based  on  the host's version of the	files,
       though they can be customized with options  (for	 example,  --dns  will
       override	 the host's DNS	servers	in the created resolv.conf). Addition-
       ally, a container environment file is created in	each container to  in-
       dicate  to  programs  they are running in a container. This file	is lo-
       cated at	/run/.containerenv (or /var/run/.containerenv for FreeBSD con-
       tainers). When using the	--privileged flag the  .containerenv  contains
       name/value  pairs  indicating the container engine version, whether the
       engine is running in rootless mode, the container name and ID, as  well
       as  the	image  name  and  ID  that  the	 container  is based on. Note:
       /run/.containerenv will not be created when  a  volume  is  mounted  on
       /run.

       When   running	from   a   user	  defined   network   namespace,   the
       /etc/netns/NSNAME/resolv.conf will be  used  if	it  exists,  otherwise
       /etc/resolv.conf	will be	used.

       Default	settings are defined in	containers.conf. Most settings for re-
       mote connections	use the	servers	 containers.conf,  except  when	 docu-
       mented in man pages.

IMAGE
       The  image is specified using transport:path format. If no transport is
       specified, the docker (container	registry) transport  is	 used  by  de-
       fault.  For  remote  Podman, including Mac and Windows (excluding WSL2)
       machines, docker	is the only allowed transport.

       dir:path
	 An existing local directory path storing the manifest,	layer tarballs
       and signatures as individual files. This	is a non-standardized  format,
       primarily useful	for debugging or noninvasive container inspection.

       $ podman	save --format docker-dir fedora	-o /tmp/fedora
       $ podman	run dir:/tmp/fedora echo hello

       docker://docker-reference (Default)
	 An image reference stored in a	remote container image registry. Exam-
       ple:  "quay.io/podman/stable:latest".  The reference can	include	a path
       to a specific registry; if it does not, the registries listed  in  reg-
       istries.conf are	queried	to find	a matching image.  By default, creden-
       tials   from   podman   login   (stored	 at  $XDG_RUNTIME_DIR/contain-
       ers/auth.json by	default) are used to authenticate; otherwise it	 falls
       back to using credentials in $HOME/.docker/config.json.

       $ podman	run registry.fedoraproject.org/fedora:latest echo hello

       docker-archive:path[:docker-reference]  An  image  stored in the	docker
       save formatted file. docker-reference is	only used when creating	such a
       file, and it must not contain a digest.

       $ podman	save --format docker-archive fedora -o /tmp/fedora
       $ podman	run docker-archive:/tmp/fedora echo hello

       docker-daemon:docker-reference
	 An image in docker-reference format stored in the docker  daemon  in-
       ternal  storage.	 The docker-reference can also be an image ID (docker-
       daemon:algo:digest).

       $ sudo docker pull fedora
       $ sudo podman run docker-daemon:docker.io/library/fedora	echo hello

       oci-archive:path:tag
	 An image in a directory compliant with	the "Open Container Image Lay-
       out Specification" at the specified path	and specified with a tag.

       $ podman	save --format oci-archive fedora -o /tmp/fedora
       $ podman	run oci-archive:/tmp/fedora echo hello

OPTIONS
   --add-host=hostname[;hostname[;...]]:ip
       Add a custom host-to-IP mapping to the container's /etc/hosts file.

       The option takes	one or multiple	semicolon-separated  hostnames	to  be
       mapped  to  a single IPv4 or IPv6 address, separated by a colon.	It can
       also be used to overwrite the IP	addresses of hostnames Podman adds  to
       /etc/hosts  by  default	(also  see the --name and --hostname options).
       This option can be specified multiple times to add additional  mappings
       to  /etc/hosts.	It  conflicts with the --no-hosts option and conflicts
       with no_hosts=true in containers.conf.

       Instead of an IP	address, the special flag host-gateway can  be	given.
       This  resolves to an IP address the container can use to	connect	to the
       host. The IP address chosen depends on your network setup, thus there's
       no guarantee that Podman	can determine the host-gateway	address	 auto-
       matically,  which will then cause Podman	to fail	with an	error message.
       You can overwrite this IP address using the host_containers_internal_ip
       option in containers.conf.

       The host-gateway	address	is also	used by	Podman	to  automatically  add
       the  host.containers.internal  and  host.docker.internal	 hostnames  to
       /etc/hosts.  You	can prevent that by either giving the  --no-hosts  op-
       tion,  or  by  setting  host_containers_internal_ip="none"  in contain-
       ers.conf. If no host-gateway address was	configured manually and	Podman
       fails to	determine the IP address automatically,	Podman	will  silently
       skip  adding  these internal hostnames to /etc/hosts. If	Podman is run-
       ning in a virtual machine using podman machine (this includes  Mac  and
       Windows hosts), Podman will silently skip adding	the internal hostnames
       to /etc/hosts, unless an	IP address was configured manually; the	inter-
       nal hostnames are resolved by the gvproxy DNS resolver instead.

       Podman  will use	the /etc/hosts file of the host	as a basis by default,
       i.e.  any hostname present in this file will also  be  present  in  the
       /etc/hosts  file	of the container. A different base file	can be config-
       ured using the base_hosts_file config in	containers.conf.

   --annotation=key=value
       Add an annotation to the	container. This	option	can  be	 set  multiple
       times.

   --arch=ARCH
       Override	 the  architecture,  defaults  to  hosts,  of  the image to be
       pulled. For example, arm.  Unless overridden, subsequent	lookups	of the
       same image in the local storage matches this  architecture,  regardless
       of the host.

   --attach, -a=stdin |	stdout | stderr
       Attach to STDIN,	STDOUT or STDERR.

       In  foreground  mode (the default when -d is not	specified), podman run
       can start the process in	the container and attach the  console  to  the
       process's  standard input, output, and error. It	can even pretend to be
       a TTY (this is what most	 command-line  executables  expect)  and  pass
       along  signals. The -a option can be set	for each of stdin, stdout, and
       stderr.

   --authfile=path
       Path of the authentication file.	Default	is ${XDG_RUNTIME_DIR}/contain-
       ers/auth.json on	Linux, and $HOME/.config/containers/auth.json on  Win-
       dows/macOS.   The file is created by podman login. If the authorization
       state is	not found there, $HOME/.docker/config.json is  checked,	 which
       is set using docker login.

       Note:  There is also the	option to override the default path of the au-
       thentication file by setting the	REGISTRY_AUTH_FILE  environment	 vari-
       able. This can be done with export REGISTRY_AUTH_FILE=path.

   --blkio-weight=weight
       Block IO	relative weight. The weight is a value between 10 and 1000.

       This option is not supported on cgroups V1 rootless systems.

   --blkio-weight-device=device:weight
       Block IO	relative device	weight.

   --cap-add=capability
       Add Linux capabilities.

   --cap-drop=capability
       Drop Linux capabilities.

   --cgroup-conf=KEY=VALUE
       When  running on	cgroup v2, specify the cgroup file to write to and its
       value. For example --cgroup-conf=memory.high=1073741824 sets  the  mem-
       ory.high	limit to 1GB.

   --cgroup-parent=path
       Path to cgroups under which the cgroup for the container	is created. If
       the  path is not	absolute, the path is considered to be relative	to the
       cgroups path of the init	process. Cgroups are created if	 they  do  not
       already exist.

   --cgroupns=mode
       Set the cgroup namespace	mode for the container.

        host: use the host's cgroup namespace inside the container.

        container:id: join the	namespace of the specified container.

        private: create a new cgroup namespace.

        ns:path: join the namespace at	the specified path.

       If the host uses	cgroups	v1, the	default	is set to host.	On cgroups v2,
       the default is private.

   --cgroups=how
       Determines whether the container	creates	CGroups.

       Default is enabled.

       The  enabled  option creates a new cgroup under the cgroup-parent.  The
       disabled	option forces the container to not create  CGroups,  and  thus
       conflicts  with	CGroup	options	(--cgroupns and	--cgroup-parent).  The
       no-conmon option	disables a new CGroup only  for	 the  conmon  process.
       The  split option splits	the current CGroup in two sub-cgroups: one for
       conmon and one for the container	payload. It is	not  possible  to  set
       --cgroup-parent with split.

   --chrootdirs=path
       Path  to	 a  directory inside the container that	is treated as a	chroot
       directory.   Any	  Podman   managed   file   (e.g.,   /etc/resolv.conf,
       /etc/hosts,  etc/hostname)  that	 is mounted into the root directory is
       mounted into that location as well.  Multiple directories are separated
       with a comma.

   --cidfile=file
       Write the container ID to file.	The file is  removed  along  with  the
       container,  except  when	used with podman --remote run on detached con-
       tainers.

   --conmon-pidfile=file
       Write the pid of	the conmon process to a	file. As conmon	runs in	a sep-
       arate process than Podman, this is  necessary  when  using  systemd  to
       restart	Podman containers.  (This option is not	available with the re-
       mote Podman client, including Mac  and  Windows	(excluding  WSL2)  ma-
       chines)

   --cpu-period=limit
       Set  the	CPU period for the Completely Fair Scheduler (CFS), which is a
       duration	in microseconds. Once the container's CPU quota	is used	up, it
       will not	be scheduled to	run until the current period ends. Defaults to
       100000 microseconds.

       On some systems,	changing the resource limits may not  be  allowed  for
       non-root	 users.	 For  more  details,  see  https://github.com/contain-
       ers/podman/blob/main/troubleshooting.md#26-running-containers-with-re-
       source-limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --cpu-quota=limit
       Limit the CPU Completely	Fair Scheduler (CFS) quota.

       Limit the container's CPU usage.	By default, containers	run  with  the
       full  CPU  resource. The	limit is a number in microseconds. If a	number
       is provided, the	container is allowed to	use that much CPU  time	 until
       the CPU period ends (controllable via --cpu-period).

       On  some	 systems,  changing the	resource limits	may not	be allowed for
       non-root	 users.	 For  more  details,  see  https://github.com/contain-
       ers/podman/blob/main/troubleshooting.md#26-running-containers-with-re-
       source-limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --cpu-rt-period=microseconds
       Limit the CPU real-time period in microseconds.

       Limit the container's Real Time CPU usage. This option tells the	kernel
       to  restrict  the  container's Real Time	CPU usage to the period	speci-
       fied.

       This option is only supported on	cgroups	V1 rootful systems.

   --cpu-rt-runtime=microseconds
       Limit the CPU real-time runtime in microseconds.

       Limit the containers Real Time CPU usage. This option tells the	kernel
       to  limit  the amount of	time in	a given	CPU period Real	Time tasks may
       consume.	Ex: Period of 1,000,000us and Runtime of 950,000us means  that
       this container can consume 95% of available CPU and leave the remaining
       5% to normal priority tasks.

       The  sum	of all runtimes	across containers cannot exceed	the amount al-
       lotted to the parent cgroup.

       This option is only supported on	cgroups	V1 rootful systems.

   --cpu-shares, -c=shares
       CPU shares (relative weight).

       By default, all containers get the same proportion of CPU cycles.  This
       proportion  can	be  modified  by  changing  the	 container's CPU share
       weighting relative to the combined weight of all	the  running  contain-
       ers.  Default weight is 1024.

       The  proportion	only applies when CPU-intensive	processes are running.
       When tasks in one container are idle,  other  containers	 can  use  the
       left-over  CPU  time. The actual	amount of CPU time varies depending on
       the number of containers	running	on the system.

       For example, consider three containers, one has a cpu-share of 1024 and
       two others have a cpu-share setting of 512. When	processes in all three
       containers attempt to use 100% of CPU, the first	container receives 50%
       of the total CPU	time. If a fourth container is added with a  cpu-share
       of  1024,  the  first container only gets 33% of	the CPU. The remaining
       containers receive 16.5%, 16.5% and 33% of the CPU.

       On a multi-core system, the shares of CPU time are distributed over all
       CPU cores. Even if a container is limited to  less  than	 100%  of  CPU
       time, it	can use	100% of	each individual	CPU core.

       For example, consider a system with more	than three cores.  If the con-
       tainer C0 is started with --cpu-shares=512 running one process, and an-
       other  container	 C1 with --cpu-shares=1024 running two processes, this
       can result in the following division of CPU shares:

       +-----+-----------+-----+--------------+
       | PID | container | CPU | CPU share    |
       +-----+-----------+-----+--------------+
       | 100 | C0	 | 0   | 100% of CPU0 |
       +-----+-----------+-----+--------------+
       | 101 | C1	 | 1   | 100% of CPU1 |
       +-----+-----------+-----+--------------+
       | 102 | C1	 | 2   | 100% of CPU2 |
       +-----+-----------+-----+--------------+

       On some systems,	changing the resource limits may not  be  allowed  for
       non-root	 users.	 For  more  details,  see  https://github.com/contain-
       ers/podman/blob/main/troubleshooting.md#26-running-containers-with-re-
       source-limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --cpus=number
       Number of CPUs. The default is 0.0 which	means no limit.	This is	short-
       hand for	--cpu-period and --cpu-quota, therefore	the option  cannot  be
       specified with --cpu-period or --cpu-quota.

       On  some	 systems,  changing the	CPU limits may not be allowed for non-
       root users. For more  details,  see  https://github.com/containers/pod-
       man/blob/main/troubleshooting.md#26-running-containers-with-resource-
       limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --cpuset-cpus=number
       CPUs in which to	allow execution. Can be	specified as a comma-separated
       list  (e.g.  0,1),  as  a  range	(e.g. 0-3), or any combination thereof
       (e.g. 0-3,7,11-15).

       On some systems,	changing the resource limits may not  be  allowed  for
       non-root	 users.	 For  more  details,  see  https://github.com/contain-
       ers/podman/blob/main/troubleshooting.md#26-running-containers-with-re-
       source-limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --cpuset-mems=nodes
       Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only	effec-
       tive on NUMA systems.

       If there	are four memory	nodes  on  the	system	(0-3),	use  --cpuset-
       mems=0,1	 then  processes  in  the  container only uses memory from the
       first two memory	nodes.

       On some systems,	changing the resource limits may not  be  allowed  for
       non-root	 users.	 For  more  details,  see  https://github.com/contain-
       ers/podman/blob/main/troubleshooting.md#26-running-containers-with-re-
       source-limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --decryption-key=key[:passphrase]
       The [key[:passphrase]] to be used for decryption	 of  images.  Key  can
       point  to  keys and/or certificates. Decryption is tried	with all keys.
       If the key is protected by a passphrase,	it is required to be passed in
       the argument and	omitted	otherwise.

   --detach, -d
       Detached	mode: run the container	in the background and  print  the  new
       container ID. The default is false.

       At any time run podman ps in the	other shell to view a list of the run-
       ning  containers.  Reattach  to a detached container with podman	attach
       command.

       When attached via tty mode, detach from the  container  (and  leave  it
       running)	 using	a  configurable	 key sequence. The default sequence is
       ctrl-p,ctrl-q.  Specify the key sequence	using  the  --detach-keys  op-
       tion,  or  configure  it	 in  the  containers.conf  file:  see contain-
       ers.conf(5) for more information.

   --detach-keys=sequence
       Specify the key sequence	for detaching a	container. Format is a	single
       character [a-Z] or one or more ctrl-<value> characters where <value> is
       one  of:	a-z, @,	^, [, ,	or _. Specifying "" disables this feature. The
       default is ctrl-p,ctrl-q.

       This option can also be set in containers.conf(5) file.

   --device=host-device[:container-device][:permissions]
       Add a host device to the	container. Optional permissions	parameter  can
       be  used	 to  specify device permissions	by combining r for read, w for
       write, and m for	mknod(2).

       Example:	--device=/dev/sdc:/dev/xvdc:rwm.

       Note: if	host-device is a symbolic link then it is resolved first.  The
       container only stores the major and minor numbers of the	host device.

       Podman may load kernel modules required for using the specified device.
       The  devices  that  Podman  loads  modules  for	when  necessary	  are:
       /dev/fuse.

       In  rootless mode, the new device is bind mounted in the	container from
       the host	rather than Podman creating it within the container space. Be-
       cause the bind mount retains its	SELinux	label on SELinux systems,  the
       container  can get permission denied when accessing the mounted device.
       Modify SELinux settings to allow	containers to use  all	device	labels
       via the following command:

       $ sudo setsebool	-P  container_use_devices=true

       Note: if	the user only has access rights	via a group, accessing the de-
       vice  from inside a rootless container fails. Use the --group-add keep-
       groups flag to pass the user's supplementary group access into the con-
       tainer.

   --device-cgroup-rule="type major:minor mode"
       Add a rule to the cgroup	allowed	devices	list. The rule is expected  to
       be  in  the  format  specified in the Linux kernel documentation	admin-
       guide/cgroup-v1/devices:	- type:	a (all), c (char), or b	(block); - ma-
       jor and minor: either a number, or * for	all; - mode: a composition  of
       r (read), w (write), and	m (mknod(2)).

   --device-read-bps=path:rate
       Limit  read  rate  (in  bytes per second) from a	device (e.g. --device-
       read-bps=/dev/sda:1mb).

       On some systems,	changing the resource limits may not  be  allowed  for
       non-root	 users.	 For  more  details,  see  https://github.com/contain-
       ers/podman/blob/main/troubleshooting.md#26-running-containers-with-re-
       source-limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --device-read-iops=path:rate
       Limit read rate (in IO operations per second) from a device (e.g. --de-
       vice-read-iops=/dev/sda:1000).

       On some systems,	changing the resource limits may not  be  allowed  for
       non-root	 users.	 For  more  details,  see  https://github.com/contain-
       ers/podman/blob/main/troubleshooting.md#26-running-containers-with-re-
       source-limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --device-write-bps=path:rate
       Limit write rate	(in bytes per second)  to  a  device  (e.g.  --device-
       write-bps=/dev/sda:1mb).

       On  some	 systems,  changing the	resource limits	may not	be allowed for
       non-root	 users.	 For  more  details,  see  https://github.com/contain-
       ers/podman/blob/main/troubleshooting.md#26-running-containers-with-re-
       source-limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --device-write-iops=path:rate
       Limit  write rate (in IO	operations per second) to a device (e.g. --de-
       vice-write-iops=/dev/sda:1000).

       On some systems,	changing the resource limits may not  be  allowed  for
       non-root	 users.	 For  more  details,  see  https://github.com/contain-
       ers/podman/blob/main/troubleshooting.md#26-running-containers-with-re-
       source-limits-fails-with-a-permissions-error

       This option is not supported on cgroups V1 rootless systems.

   --disable-content-trust
       This is a Docker-specific option	to disable  image  verification	 to  a
       container  registry  and	 is  not supported by Podman. This option is a
       NOOP and	provided solely	for scripting compatibility.

   --dns=ipaddr
       Set custom DNS servers.

       This option can be used to override the DNS configuration passed	to the
       container. Typically this is necessary when the host DNS	 configuration
       is  invalid  for	the container (e.g., 127.0.0.1). When this is the case
       the --dns flag is necessary for every run.

       The special value none can be specified to disable creation of /etc/re-
       solv.conf in the	container by Podman.  The /etc/resolv.conf file	in the
       image is	used without changes.

       This option cannot be combined with --network that is set  to  none  or
       container:id.

   --dns-option=option
       Set  custom  DNS	 options. Invalid if using --dns-option	with --network
       that is set to none or container:id.

   --dns-search=domain
       Set custom DNS search  domains.	Invalid	 if  using  --dns-search  with
       --network  that	is set to none or container:id.	 Use --dns-search=. to
       remove the search domain.

   --entrypoint="command" | '["command", arg1 ,	...]'
       Override	the default ENTRYPOINT from the	image.

       The ENTRYPOINT of an image is similar to	a COMMAND because it specifies
       what executable to run when the container starts, but it	is (purposely)
       more difficult to override. The ENTRYPOINT gives	a  container  its  de-
       fault  nature  or  behavior.  When the ENTRYPOINT is set, the container
       runs as if it were that binary, complete	with default options. More op-
       tions can be passed in via the COMMAND. But, if a  user	wants  to  run
       something  else	inside the container, the --entrypoint option allows a
       new ENTRYPOINT to be specified.

       Specify multi option commands in	the form of a json string.

   --env, -e=env
       Set environment variables.

       This option allows arbitrary environment	variables that	are  available
       for  the	process	to be launched inside of the container.	If an environ-
       ment variable is	specified without a value, Podman checks the host  en-
       vironment  for  a  value	 and set the variable only if it is set	on the
       host. As	a special case,	if an environment  variable  ending  in	 *  is
       specified  without  a  value,  Podman searches the host environment for
       variables starting with the prefix and adds those variables to the con-
       tainer.

       See <#environment> note below for precedence and	examples.

   --env-file=file
       Read in a line-delimited	file of	environment variables.

       See <#environment> note below for precedence and	examples.

   --env-host
       Use host	environment inside of the container. See Environment note  be-
       low  for	precedence. (This option is not	available with the remote Pod-
       man client, including Mac and Windows (excluding	WSL2) machines)

   --env-merge=env
       Preprocess default environment variables	for the	containers. For	 exam-
       ple  if	image  contains	environment variable hello=world user can pre-
       process it  using  --env-merge  hello=${hello}-some  so	new  value  is
       hello=world-some.

       Please  note  that  if the environment variable hello is	not present in
       the image, then it'll be	replaced by  an	 empty	string	and  so	 using
       --env-merge  hello=${hello}-some	 would	result	in  the	 new  value of
       hello=-some, notice the leading - delimiter.

   --expose=port[/protocol]
       Expose a	port or	a range	of ports (e.g. --expose=3300-3310).  The  pro-
       tocol  can  be  tcp, udp	or sctp	and if not given tcp is	assumed.  This
       option matches the EXPOSE instruction for image builds and has  no  ef-
       fect  on	the actual networking rules unless -P/--publish-all is used to
       forward to all exposed ports from random	host ports.  To	 forward  spe-
       cific  ports  from the host into	the container use the -p/--publish op-
       tion instead.

   --gidmap=[flags]container_uid:from_uid[:amount]
       Run the container in a new user namespace using the supplied  GID  map-
       ping. This option conflicts with	the --userns and --subgidname options.
       This  option  provides  a way to	map host GIDs to container GIDs	in the
       same way	as --uidmap maps host UIDs to container	UIDs. For details  see
       --uidmap.

       Note:  the  --gidmap  option  cannot  be	called in conjunction with the
       --pod option as a gidmap	cannot be set on the container level when in a
       pod.

   --gpus=ENTRY
       GPU devices to add to the container ('all' to pass all GPUs)  Currently
       only Nvidia devices are supported.

   --group-add=group | keep-groups
       Assign  additional  groups  to the primary user running within the con-
       tainer process.

        keep-groups is	a special flag that tells Podman to keep  the  supple-
	 mentary group access.

       Allows  container to use	the user's supplementary group access. If file
       systems or devices are only accessible by the  rootless	user's	group,
       this  flag tells	the OCI	runtime	to pass	the group access into the con-
       tainer. Currently only available	with the crun OCI runtime. Note: keep-
       groups is exclusive, other groups cannot	be specified with  this	 flag.
       (Not  available for remote commands, including Mac and Windows (exclud-
       ing WSL2) machines)

   --group-entry=ENTRY
       Customize the entry that	is written to the /etc/group file  within  the
       container when --user is	used.

       The  variables  $GROUPNAME,  $GID,  and $USERLIST are automatically re-
       placed with their value at runtime if present.

   --health-cmd="command" | '["command", arg1 ,	...]'
       Set or alter a healthcheck command for a	container. The	command	 is  a
       command	to  be	executed inside	the container that determines the con-
       tainer health. The command is required for other	healthcheck options to
       be applied. A value of none disables existing healthchecks.

       Multiple	options	can be passed in the form of a JSON array;  otherwise,
       the command is interpreted as an	argument to /bin/sh -c.

   --health-interval=interval
       Set an interval for the healthchecks. An	interval of disable results in
       no automatic timer setup. The default is	30s.

   --health-log-destination=directory_path
       Set  the	 destination  of the HealthCheck log. Directory	path, local or
       events_logger (local use	container state	file) (Default:	local)

        local:	(default) HealthCheck logs are stored in  overlay  containers.
	 (For example: $runroot/healthcheck.log)

        directory:  creates  a	 log file named	<container-ID>-healthcheck.log
	 with HealthCheck logs in the specified	directory.

        events_logger:	The log	will be	written	with logging mechanism set  by
	 events_logger.	It also	saves the log to a default directory, for per-
	 formance on a system with a large number of logs.

   --health-max-log-count=number of stored logs
       Set  maximum number of attempts in the HealthCheck log file. ('0' value
       means an	infinite number	of attempts in the log file) (Default:	5  at-
       tempts)

   --health-max-log-size=size of stored	logs
       Set  maximum length in characters of stored HealthCheck log. ("0" value
       means an	infinite log length) (Default: 500 characters)

   --health-on-failure=action
       Action to take once the container transitions to	 an  unhealthy	state.
       The default is none.

        none: Take no action.

        kill: Kill the	container.

        restart:  Restart  the	 container.  Do	not combine the	restart	action
	 with the --restart flag.  When	running	inside of a systemd unit, con-
	 sider using the kill or stop action instead to	make use of  systemd's
	 restart policy.

        stop: Stop the	container.

   --health-retries=retries
       The  number of retries allowed before a healthcheck is considered to be
       unhealthy. The default value is 3.

   --health-start-period=period
       The initialization time needed for a container to bootstrap. The	 value
       can be expressed	in time	format like 2m3s. The default value is 0s.

       Note:  The  health  check command is executed as	soon as	a container is
       started,	if the health check is successful the container's health state
       will be updated to healthy. However, if the  health  check  fails,  the
       health  state  will  stay  as starting until either the health check is
       successful or until the --health-start-period  time  is	over.  If  the
       health  check  command  fails  after  the --health-start-period time is
       over, the health	state will be updated to unhealthy.  The health	 check
       command	is executed periodically based on the value of --health-inter-
       val.

   --health-startup-cmd="command" | '["command", arg1 ,	...]'
       Set a startup healthcheck command for a container. This command is exe-
       cuted inside the	container and is used to gate the regular healthcheck.
       When the	startup	command	succeeds, the regular healthcheck  begins  and
       the  startup healthcheck	ceases.	Optionally, if the command fails for a
       set  number  of	attempts,  the	container  is  restarted.  A   startup
       healthcheck  can	 be  used  to  ensure that containers with an extended
       startup period are  not	marked	as  unhealthy  until  they  are	 fully
       started.	  Startup  healthchecks	 can  only  be	used  when  a  regular
       healthcheck (from the container's image or the --health-cmd option)  is
       also set.

   --health-startup-interval=interval
       Set an interval for the startup healthcheck. An interval	of disable re-
       sults in	no automatic timer setup. The default is 30s.

   --health-startup-retries=retries
       The  number of attempts allowed before the startup healthcheck restarts
       the container. If set to	0, the container is never restarted.  The  de-
       fault is	0.

   --health-startup-success=retries
       The  number  of successful runs required	before the startup healthcheck
       succeeds	and the	regular	healthcheck begins. A value of	0  means  that
       any success begins the regular healthcheck. The default is 0.

   --health-startup-timeout=timeout
       The  maximum  time a startup healthcheck	command	has to complete	before
       it is marked as failed. The value can be	expressed  in  a  time	format
       like 2m3s. The default value is 30s.

   --health-timeout=timeout
       The maximum time	allowed	to complete the	healthcheck before an interval
       is  considered failed. Like start-period, the value can be expressed in
       a time format such as 1m22s. The	default	value is 30s.

   --help
       Print usage statement

   --hostname, -h=name
       Set the container's hostname inside the container.

       This option can only be used with a private UTS namespace --uts=private
       (default). If --pod is given and	the pod	shares the same	UTS  namespace
       (default), the pod's hostname is	used. The given	hostname is also added
       to  the	/etc/hosts file	using the container's primary IP address (also
       see the --add-host option).

   --hostuser=name
       Add a user account to /etc/passwd from the host to the  container.  The
       Username	or UID must exist on the host system.

   --http-proxy
       By default proxy	environment variables are passed into the container if
       set  for	 the Podman process. This can be disabled by setting the value
       to false.  The environment  variables  passed  in  include  http_proxy,
       https_proxy,  ftp_proxy,	 no_proxy, and also the	upper case versions of
       those. This option is only needed when the host system must use a proxy
       but the container does not use any proxy. Proxy	environment  variables
       specified  for the container in any other way overrides the values that
       have been passed	through	from the host.	(Other	ways  to  specify  the
       proxy for the container include passing the values with the --env flag,
       or  hard	 coding	 the proxy environment at container build time.)  When
       used with the remote client it uses  the	 proxy	environment  variables
       that are	set on the server process.

       Defaults	to true.

   --image-volume=bind | tmpfs | ignore
       Tells Podman how	to handle the builtin image volumes. Default is	bind.

        bind:	An anonymous named volume is created and mounted into the con-
	 tainer.

        tmpfs:	The volume is mounted onto the container as a tmpfs, which al-
	 lows the users	to create content that disappears when	the  container
	 is stopped.

        ignore: All volumes are just ignored and no action is taken.

   --init
       Run  an	init  inside  the  container  that  forwards signals and reaps
       processes.  The container-init binary is	mounted	 at  /run/podman-init.
       Mounting	over /run breaks container execution.

   --init-path=path
       Path to the container-init binary.

   --interactive, -i
       When  set  to  true,  make stdin	available to the contained process. If
       false, the stdin	of the contained  process  is  empty  and  immediately
       closed.

       If  attached,  stdin  is	 piped	to the contained process. If detached,
       reading stdin will block	until later attached.

       Caveat: Podman will consume input from stdin  as	 soon  as  it  becomes
       available, even if the contained	process	doesn't	request	it.

   --ip=ipv4
       Specify	 a   static  IPv4  address  for	 the  container,  for  example
       10.88.64.128.  This option can only be used if the container is	joined
       to only a single	network	- i.e.,	--network=network-name is used at most
       once  - and if the container is not joining another container's network
       namespace via --network=container:id.  The address must be  within  the
       network's IP address pool (default 10.88.0.0/16).

       To  specify  multiple  static  IP addresses per container, set multiple
       networks	using the --network option with	a static IP address  specified
       for each	using the ip mode for that option.

   --ip6=ipv6
       Specify	 a   static  IPv6  address  for	 the  container,  for  example
       fd46:db93:aa76:ac37::10.	 This option can only be used if the container
       is joined to only a single network -  i.e.,  --network=network-name  is
       used  at	 most  once - and if the container is not joining another con-
       tainer's	network	namespace  via	--network=container:id.	  The  address
       must be within the network's IPv6 address pool.

       To  specify  multiple static IPv6 addresses per container, set multiple
       networks	using the --network option with	a static IPv6  address	speci-
       fied for	each using the ip6 mode	for that option.

   --ipc=ipc
       Set  the	IPC namespace mode for a container. The	default	is to create a
       private IPC namespace.

        "": Use Podman's default, defined in containers.conf.

        container:id: reuses another container's shared  memory,  semaphores,
	 and message queues

        host:	use  the  host's shared	memory,	semaphores, and	message	queues
	 inside	the container. Note: the host mode gives  the  container  full
	 access	to local shared	memory and is therefore	considered insecure.

        none:	private	IPC namespace, with /dev/shm not mounted.

        ns:path: path to an IPC namespace to join.

        private: private IPC namespace.

        shareable:  private IPC namespace with	a possibility to share it with
	 other containers.

   --label, -l=key=value
       Add metadata to a container.

   --label-file=file
       Read in a line-delimited	file of	labels.

   --link-local-ip=ip
       Not implemented.

   --log-driver=driver
       Logging driver for the container. Currently available options are  k8s-
       file,  journald,	 none, passthrough and passthrough-tty,	with json-file
       aliased to k8s-file for scripting compatibility.	(Default journald).

       The podman info command below displays the default log-driver  for  the
       system.

       $ podman	info --format '{{ .Host.LogDriver }}'
       journald

       The passthrough driver passes down the standard streams (stdin, stdout,
       stderr)	to  the	 container.   It is not	allowed	with the remote	Podman
       client, including Mac and Windows (excluding WSL2) machines, and	 on  a
       tty, since it is	vulnerable to attacks via TIOCSTI.

       The  passthrough-tty  driver  is	the same as passthrough	except that it
       also allows it to be used on a TTY if the user really wants it.

   --log-opt=name=value
       Logging driver specific options.

       Set custom logging configuration. The following *name*s are supported:

       path: specify a path to the log file
	   (e.g. --log-opt path=/var/log/container/mycontainer.json);

       max-size: specify a max size of the log file
	   (e.g. --log-opt max-size=10mb);

       tag: specify a custom log tag for the container
	   (e.g. --log-opt tag="{{.ImageName}}".  It supports the same keys as
       podman inspect --format.	 This option is	currently  supported  only  by
       the journald log	driver.

   --mac-address=address
       Container  network  interface MAC address (e.g. 92:d0:c6:0a:29:33) This
       option can only be used if the container	is joined  to  only  a	single
       network	-  i.e.,  --network=network-name is used at most once -	and if
       the container is	not joining another container's	network	namespace  via
       --network=container:id.

       Remember	 that  the  MAC	address	in an Ethernet network must be unique.
       The IPv6	link-local address is based on the device's  MAC  address  ac-
       cording to RFC4862.

       To  specify  multiple  static MAC addresses per container, set multiple
       networks	using the --network option with	a static MAC address specified
       for each	using the mac mode for that option.

   --memory, -m=number[unit]
       Memory limit. A unit can	be b (bytes), k	(kibibytes), m (mebibytes), or
       g (gibibytes).

       Allows the memory available to a	container to be	 constrained.  If  the
       host  supports  swap  memory,  then the -m memory setting can be	larger
       than physical RAM. If a limit of	0 is specified	(not  using  -m),  the
       container's  memory  is not limited. The	actual limit may be rounded up
       to a multiple of	the operating system's page size (the  value  is  very
       large, that's millions of trillions).

       This option is not supported on cgroups V1 rootless systems.

   --memory-reservation=number[unit]
       Memory  soft  limit.  A	unit  can  be  b  (bytes),  k  (kibibytes),  m
       (mebibytes), or g (gibibytes).

       After setting memory reservation, when the system detects  memory  con-
       tention or low memory, containers are forced to restrict	their consump-
       tion to their reservation. So always set	the value below	--memory, oth-
       erwise  the hard	limit takes precedence.	By default, memory reservation
       is the same as memory limit.

       This option is not supported on cgroups V1 rootless systems.

   --memory-swap=number[unit]
       A limit value equal to memory plus swap.	 A unit	can be	b  (bytes),  k
       (kibibytes), m (mebibytes), or g	(gibibytes).

       Must  be	 used with the -m (--memory) flag.  The	argument value must be
       larger than that	of
	-m (--memory) By default, it is	set to double the value	of --memory.

       Set number to -1	to enable unlimited swap.

       This option is not supported on cgroups V1 rootless systems.

   --memory-swappiness=number
       Tune a container's memory swappiness behavior. Accepts an  integer  be-
       tween 0 and 100.

       This flag is only supported on cgroups V1 rootful systems.

   --mount=type=TYPE,TYPE-SPECIFIC-OPTION[,...]
       Attach a	filesystem mount to the	container

       Current	supported  mount  TYPEs	 are bind, devpts, glob, image,	ramfs,
       tmpfs and volume.

       Options common to all mount types:

        src, source: mount source spec	for bind, glob,	and volume.  Mandatory
	 for bind and glob.

        dst, destination, target: mount destination spec.

       When source globs are specified without the destination directory,  the
       files  and  directories are mounted with	their complete path within the
       container. When the destination is specified, the files and directories
       matching	the glob on the	base file name on  the	destination  directory
       are  mounted. The option	type=glob,src=/foo*,destination=/tmp/bar tells
       container engines to mount host files matching /foo* to	the  /tmp/bar/
       directory in the	container.

       Options specific	to type=volume:

        ro, readonly: true or false (default if unspecified: false).

        U,  chown: true or false (default if unspecified: false). Recursively
	 change	the owner and group of the source volume based on the UID  and
	 GID of	the container.

        idmap:	 If  specified,	 create	 an  idmapped mount to the target user
	 namespace in the container.  The idmap	option supports	a custom  map-
	 ping  that  can be different than the user namespace used by the con-
	 tainer.  The mapping can be specified after the  idmap	 option	 like:
	 idmap=uids=0-1-10#10-11-10;gids=0-100-10.    For  each	 triplet,  the
	 first value is	the start of the backing  file	system	IDs  that  are
	 mapped	 to  the second	value on the host.  The	length of this mapping
	 is given in the third value.  Multiple	ranges are separated  with  #.
	 If  the specified mapping is prepended	with a '@' then	the mapping is
	 considered relative to	the container user namespace. The host ID  for
	 the  mapping  is  changed to account for the relative position	of the
	 container user	in the container user namespace.

       Options specific	to type=image:

        rw, readwrite:	true or	false (default if unspecified: false).

        subpath: Mount	only a specific	path within the	image, instead of  the
	 whole image.

       Options specific	to bind	and glob:

        ro, readonly: true or false (default if unspecified: false).

        bind-propagation:   shared,   slave,  private,	 unbindable,  rshared,
	 rslave, runbindable, or rprivate (default).[1]	<#Footnote1> See  also
	 mount(2).

        bind-nonrecursive:  do	 not set up a recursive	bind mount. By default
	 it is recursive.

        relabel: shared, private.

        idmap:	true or	false (default if unspecified: false).	If true,  cre-
	 ate an	idmapped mount to the target user namespace in the container.

        U,  chown: true or false (default if unspecified: false). Recursively
	 change	the owner and group of the source volume based on the UID  and
	 GID of	the container.

        no-dereference:  do not dereference symlinks but copy the link	source
	 into the mount	destination.

       Options specific	to type=tmpfs and ramfs:

        ro, readonly: true or false (default if unspecified: false).

        tmpfs-size: Size of the tmpfs/ramfs mount, in bytes. Unlimited	by de-
	 fault in Linux.

        tmpfs-mode: Octal file	mode of	the tmpfs/ramfs	(e.g. 700 or 0700.).

        tmpcopyup: Enable copyup from the image directory at the  same	 loca-
	 tion to the tmpfs/ramfs. Used by default.

        notmpcopyup: Disable copying files from the image to the tmpfs/ramfs.

        U,  chown: true or false (default if unspecified: false). Recursively
	 change	the owner and group of the source volume based on the UID  and
	 GID of	the container.

       Options specific	to type=devpts:

        uid: numeric UID of the file owner (default: 0).

        gid: numeric GID of the file owner (default: 0).

        mode: octal permission	mask for the file (default: 600).

        max: maximum number of	PTYs (default: 1048576).

       Examples:

        type=bind,source=/path/on/host,destination=/path/in/container

        type=bind,src=/path/on/host,dst=/path/in/container,relabel=shared

        type=bind,src=/path/on/host,dst=/path/in/container,rela-
	 bel=shared,U=true

        type=devpts,destination=/dev/pts

        type=glob,src=/usr/lib/libfoo*,destination=/usr/lib,ro=true

        type=image,source=fedora,destination=/fedora-image,rw=true

        type=ramfs,tmpfs-size=512M,destination=/path/in/container

        type=tmpfs,tmpfs-size=512M,destination=/path/in/container

        type=tmpfs,destination=/path/in/container,noswap

        type=volume,source=vol1,destination=/path/in/container,ro=true

   --name=name
       Assign a	name to	the container.

       The operator can	identify a container in	three ways:

        UUID			       long			    identifier
	 (f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778);

        UUID short identifier (f78375b1c487);

        Name (jonah).

       Podman generates	a UUID for each	container, and if no name is  assigned
       to  the	container using	--name,	Podman generates a random string name.
       The name	can be useful as a more	human-friendly way  to	identify  con-
       tainers.	 This works for	both background	and foreground containers. The
       container's name	is also	added to the /etc/hosts	file  using  the  con-
       tainer's	primary	IP address (also see the --add-host option).

   --network=mode, --net
       Set the network mode for	the container.

       Valid mode values are:

        bridge[:OPTIONS,...]:	Create	a network stack	on the default bridge.
	 This is the default for rootful containers. It	is possible to specify
	 these additional options:

	  alias=name: Add network-scoped alias	for the	container.

	  ip=IPv4: Specify a static IPv4 address for this container.

	  ip6=IPv6: Specify a static IPv6 address for this container.

	  mac=MAC: Specify a static MAC address for this container.

	  interface_name=name:	Specify	a name for the created network	inter-
	   face	inside the container.

	 For  example,	to set a static	ipv4 address and a static mac address,
	 use --network bridge:ip=10.88.0.10,mac=44:33:22:11:00:99.

        <network name or ID>[:OPTIONS,...]: Connect to	 a  user-defined  net-
	 work; this is the network name	or ID from a network created by	podman
	 network  create. It is	possible to specify the	same options described
	 under the bridge mode above. Use the --network	option multiple	 times
	 to specify additional networks.
	 For backwards compatibility it	is also	possible to specify comma-sep-
	 arated	 networks  on  the first --network argument, however this pre-
	 vents you from	using the options described under the  bridge  section
	 above.

        none: Create a	network	namespace for the container but	do not config-
	 ure network interfaces	for it,	thus the container has no network con-
	 nectivity.

        container:id: Reuse another container's network stack.

        host:	Do  not	 create	 a  network  namespace,	the container uses the
	 host's	network. Note: The host	mode gives the container  full	access
	 to  local  system  services such as D-bus and is therefore considered
	 insecure.

        ns:path: Path to a network namespace to join.

        private: Create a new namespace for  the  container.  This  uses  the
	 bridge	mode for rootful containers and	slirp4netns for	rootless ones.

        slirp4netns[:OPTIONS,...]:  use  slirp4netns(1) to create a user net-
	 work stack. It	is possible to specify these additional	options,  they
	 can also be set with network_cmd_options in containers.conf:

	  allow_host_loopback=true|false: Allow slirp4netns to	reach the host
	   loopback  IP	(default is 10.0.2.2 or	the second IP from slirp4netns
	   cidr	subnet when changed, see the cidr option below).  The  default
	   is false.

	  mtu=MTU:  Specify  the  MTU	to  use	 for this network. (Default is
	   65520).

	  cidr=CIDR: Specify ip range to use for this	network.  (Default  is
	   10.0.2.0/24).

	  enable_ipv6=true|false: Enable IPv6.	Default	is true. (Required for
	   outbound_addr6).

	  outbound_addr=INTERFACE: Specify the	outbound interface slirp binds
	   to (ipv4 traffic only).

	  outbound_addr=IPv4:	Specify	 the outbound ipv4 address slirp binds
	   to.

	  outbound_addr6=INTERFACE:  Specify  the  outbound  interface	 slirp
	   binds to (ipv6 traffic only).

	  outbound_addr6=IPv6:	 Specify the outbound ipv6 address slirp binds
	   to.

	  port_handler=rootlesskit: Use rootlesskit for port forwarding.  De-
	   fault.
	   Note: Rootlesskit changes the source	IP address of incoming packets
	   to  an  IP  address	in  the	 container  network namespace, usually
	   10.0.2.100. If the application requires the real source IP address,
	   e.g.	web server logs, use the slirp4netns port handler.  The	 root-
	   lesskit port	handler	is also	used for rootless containers when con-
	   nected to user-defined networks.

	  port_handler=slirp4netns:  Use  the slirp4netns port	forwarding, it
	   is slower than rootlesskit but preserves the	correct	source IP  ad-
	   dress. This port handler cannot be used for user-defined networks.

        pasta[:OPTIONS,...]:  use  pasta(1)  to create	a user-mode networking
	 stack.
	 This is the default for rootless containers  and  only	 supported  in
	 rootless mode.
	 By  default,  IPv4  and IPv6 addresses	and routes, as well as the pod
	 interface name, are copied from the host. If  port  forwarding	 isn't
	 configured,  ports are	forwarded dynamically as services are bound on
	 either	side (init namespace or	container namespace). Port  forwarding
	 preserves  the	 original  source  IP  address.	 Options  described in
	 pasta(1) can be specified as comma-separated arguments.
	 In terms of pasta(1) options, --config-net is given  by  default,  in
	 order	to  configure  networking  when	 the container is started, and
	 --no-map-gw is	also assumed by	default, to avoid direct  access  from
	 container  to host using the gateway address. The latter can be over-
	 ridden	by passing --map-gw in the pasta-specific options (despite not
	 being an actual pasta(1) option).
	 Also, -t none and -u none are passed if, respectively,	no TCP or  UDP
	 port  forwarding from host to container is configured,	to disable au-
	 tomatic port forwarding based on bound	ports. Similarly, -T none  and
	 -U none are given to disable the same functionality from container to
	 host.
	 Some examples:

	  pasta:--map-gw:  Allow the container	to directly reach the host us-
	   ing the gateway address.

	  pasta:--mtu,1500: Specify a 1500 bytes MTU for the tap interface in
	   the container.

	  pasta:--ipv4-only,-a,10.0.2.0,-n,24,-g,10.0.2.2,--dns-for-
	   ward,10.0.2.3,-m,1500,--no-ndp,--no-dhcpv6,--no-dhcp, equivalent to
	   default slirp4netns(1) options: disable IPv6, assign	10.0.2.0/24 to
	   the tap0 interface in the container,	with gateway 10.0.2.3,	enable
	   DNS forwarder reachable at 10.0.2.3,	set MTU	to 1500	bytes, disable
	   NDP,	DHCPv6 and DHCP	support.

	  pasta:-I,tap0,--ipv4-only,-a,10.0.2.0,-n,24,-g,10.0.2.2,--dns-for-
	   ward,10.0.2.3,--no-ndp,--no-dhcpv6,--no-dhcp, equivalent to default
	   slirp4netns(1)  options  with  Podman overrides: same as above, but
	   leave the MTU to 65520 bytes

	  pasta:-t,auto,-u,auto,-T,auto,-U,auto: enable automatic  port  for-
	   warding  based on observed bound ports from both host and container
	   sides

	  pasta:-T,5201: enable forwarding of TCP port	5201 from container to
	   host, using the loopback interface instead of the tap interface for
	   improved performance

       Invalid if using	--dns, --dns-option, or	 --dns-search  with  --network
       set to none or container:id.

       If  used	 together  with	 --pod,	 the container joins the pod's network
       namespace.

   --network-alias=alias
       Add a network-scoped alias for the container, setting the alias for all
       networks	that the container joins. To set a name	only  for  a  specific
       network,	 use the alias option as described under the --network option.
       If the network has DNS enabled (podman  network	inspect	 -f  {{.DNSEn-
       abled}}	<name>),  these	aliases	can be used for	name resolution	on the
       given network. This option can be specified multiple times.  NOTE: When
       using CNI a container only has access to	aliases	on the	first  network
       that  it	 joins.	This limitation	does not exist with netavark/aardvark-
       dns.

   --no-healthcheck
       Disable any defined healthchecks	for container.

   --no-hosts
       Do not modify the /etc/hosts file in the	container.

       Podman assumes control over the container's /etc/hosts file by  default
       and adds	entries	for the	container's name (see --name option) and host-
       name (see --hostname option), the internal host.containers.internal and
       host.docker.internal  hosts,  as	 well  as any hostname added using the
       --add-host option. Refer	to the --add-host option for details.  Passing
       --no-hosts  disables  this, so that the image's /etc/hosts file is kept
       unmodified. The same can	be achieved globally by	setting	 no_hosts=true
       in containers.conf.

       This option conflicts with --add-host.

   --oom-kill-disable
       Whether to disable OOM Killer for the container or not.

       This flag is not	supported on cgroups V2	systems.

   --oom-score-adj=num
       Tune  the  host's  OOM  preferences for containers (accepts values from
       -1000 to	1000).

       When running in rootless	mode, the specified value can't	be lower  than
       the oom_score_adj for the current process. In this case,	the oom-score-
       adj is clamped to the current process value.

   --os=OS
       Override	 the OS, defaults to hosts, of the image to be pulled. For ex-
       ample, windows.	Unless overridden, subsequent lookups of the same  im-
       age in the local	storage	matches	this OS, regardless of the host.

   --passwd
       Allow  Podman to	add entries to /etc/passwd and /etc/group when used in
       conjunction with	the --user option.  This is used to override the  Pod-
       man  provided  user setup in favor of entrypoint	configurations such as
       libnss-extrausers.

   --passwd-entry=ENTRY
       Customize the entry that	is written to the /etc/passwd file within  the
       container when --passwd is used.

       The variables $USERNAME,	$UID, $GID, $NAME, $HOME are automatically re-
       placed with their value at runtime.

   --personality=persona
       Personality sets	the execution domain via Linux personality(2).

   --pid=mode
       Set the PID namespace mode for the container.  The default is to	create
       a private PID namespace for the container.

        container:id: join another container's	PID namespace;

        host:	use  the host's	PID namespace for the container. Note the host
	 mode gives the	container full access to local PID  and	 is  therefore
	 considered insecure;

        ns:path: join the specified PID namespace;

        private: create a new namespace for the container (default).

   --pidfile=path
       When  the  pidfile location is specified, the container process'	PID is
       written to the pidfile. (This option is not available with  the	remote
       Podman  client, including Mac and Windows (excluding WSL2) machines) If
       the pidfile option is not specified,  the  container  process'  PID  is
       written	    to	    /run/containers/storage/${storage-driver}-contain-
       ers/$CID/userdata/pidfile.

       After the container is started, the location for	 the  pidfile  can  be
       discovered with the following podman inspect command:

       $ podman	inspect	--format '{{ .PidFile }}' $CID
       /run/containers/storage/${storage-driver}-containers/$CID/userdata/pidfile

   --pids-limit=limit
       Tune  the  container's pids limit. Set to -1 to have unlimited pids for
       the container. The default is  2048  on	systems	 that  support	"pids"
       cgroup controller.

   --platform=OS/ARCH
       Specify	the  platform for selecting the	image.	(Conflicts with	--arch
       and --os) The --platform	option can be used to override the current ar-
       chitecture and operating	system.	 Unless	overridden, subsequent lookups
       of the same image in the	local storage matches this  platform,  regard-
       less of the host.

   --pod=name
       Run container in	an existing pod. Podman	makes the pod automatically if
       the  pod	 name is prefixed with new:.  To make a	pod with more granular
       options,	use the	podman pod create command before creating a container.
       When a container	is run with a pod with an infra-container, the	infra-
       container is started first.

   --pod-id-file=file
       Run  container in an existing pod and read the pod's ID from the	speci-
       fied file.  When	a container is run within a pod	which  has  an	infra-
       container, the infra-container starts first.

   --preserve-fd=FD1[,FD2,...]
       Pass  down  to the process the additional file descriptors specified in
       the comma separated list.  It can be specified  multiple	 times.	  This
       option  is only supported with the crun OCI runtime.  It	might be a se-
       curity risk to use this option with other OCI runtimes.

       (This option is not available with the remote Podman client,  including
       Mac and Windows (excluding WSL2)	machines)

   --preserve-fds=N
       Pass  down to the process N additional file descriptors (in addition to
       0, 1, 2).  The total FDs	are 3+N.  (This	option is not  available  with
       the  remote  Podman  client, including Mac and Windows (excluding WSL2)
       machines)

   --privileged
       Give extended privileges	to this	container. The default is false.

       By default, Podman containers are unprivileged (=false) and cannot, for
       example,	modify parts of	the operating system. This is because  by  de-
       fault  a	container is only allowed limited access to devices. A "privi-
       leged" container	is given the  same  access  to	devices	 as  the  user
       launching  the  container,  with	 the  exception	 of  virtual  consoles
       (/dev/tty\d+) when running in systemd mode (--systemd=always).

       A privileged container turns off	the security features that isolate the
       container from the host.	Dropped	Capabilities, limited  devices,	 read-
       only mount points, Apparmor/SELinux separation, and Seccomp filters are
       all  disabled.	Due  to	the disabled security features,	the privileged
       field should almost never be set	as containers can easily break out  of
       confinement.

       Containers running in a user namespace (e.g., rootless containers) can-
       not have	more privileges	than the user that launched them.

   --publish, -p=[[ip:][hostPort]:]containerPort[/protocol]
       Publish a container's port, or range of ports, to the host.

       Both  hostPort  and containerPort can be	specified as a range of	ports.
       When specifying ranges for both,	the number of container	ports  in  the
       range must match	the number of host ports in the	range.

       If  host	 IP  is	set to 0.0.0.0 or not set at all, the port is bound on
       all IPs on the host.

       By default, Podman publishes TCP	ports. To publish a UDP	port  instead,
       give  udp as protocol. To publish both TCP and UDP ports, set --publish
       twice, with tcp,	and udp	as protocols respectively. Rootful  containers
       can also	publish	ports using the	sctp protocol.

       Host   port  does  not  have  to	 be  specified	(e.g.  podman  run  -p
       127.0.0.1::80).	If it is not, the container port is randomly  assigned
       a port on the host.

       Use podman port to see the actual mapping: podman port $CONTAINER $CON-
       TAINERPORT.

       Note  that  the	network	drivers	macvlan	and ipvlan do not support port
       forwarding, it will have	no effect on these networks.

       Note: If	a container runs within	a pod, it is not necessary to  publish
       the port	for the	containers in the pod. The port	must only be published
       by the pod itself. Pod network stacks act like the network stack	on the
       host  -	meaning	a variety of containers	in the pod and programs	in the
       container all share a single  interface,	 IP  address,  and  associated
       ports.  If  one	container  binds to a port, no other container can use
       that port within	the pod	while it is in use. Containers in the pod  can
       also  communicate over localhost	by having one container	bind to	local-
       host in the pod,	and another connect to that port.

   --publish-all, -P
       Publish all exposed ports to random ports on the	host  interfaces.  The
       default is false.

       When set	to true, publish all exposed ports to the host interfaces.  If
       the  operator uses -P (or -p) then Podman makes the exposed port	acces-
       sible on	the host and the ports are available to	any  client  that  can
       reach the host.

       When  using this	option,	Podman binds any exposed port to a random port
       on   the	  host	 within	  an   ephemeral   port	  range	  defined   by
       /proc/sys/net/ipv4/ip_local_port_range.	 To  find  the mapping between
       the host	ports and the exposed ports, use podman	port.

   --pull=policy
       Pull image policy. The default is missing.

        always: Always	pull the image and throw an error if the pull fails.

        missing: Pull the image only when the image is	not in the local  con-
	 tainers  storage.   Throw  an error if	no image is found and the pull
	 fails.

        never:	Never pull the image but use the one from the local containers
	 storage.  Throw an error if no	image is found.

        newer:	Pull if	the image on the registry is newer than	the one	in the
	 local containers storage.  An image is	considered to  be  newer  when
	 the digests are different.  Comparing the time	stamps is prone	to er-
	 rors.	Pull errors are	suppressed if a	local image was	found.

   --quiet, -q
       Suppress	output information when	pulling	images

   --rdt-class=intel-rdt-class-of-service
       Rdt-class  sets the class of service (CLOS or COS) for the container to
       run in. Based on	the Cache Allocation Technology	(CAT) feature that  is
       part  of	 Intel's  Resource  Director Technology	(RDT) feature set, all
       container processes will	run within the pre-configured COS,  represent-
       ing a part of the cache.	The COS	has to be created and configured using
       a  pseudo  file	system	(usually  mounted at /sys/fs/resctrl) that the
       resctrl kernel driver provides. Assigning the container to  a  COS  re-
       quires root privileges and thus doesn't work in a rootless environment.
       Currently,  the	feature	is only	supported using	runc as	a runtime. See
       <https://docs.kernel.org/arch/x86/resctrl.html>	for  more  details  on
       creating	a COS before a container can be	assigned to it.

   --read-only
       Mount the container's root filesystem as	read-only.

       By default, container root filesystems are writable, allowing processes
       to  write  files	anywhere. By specifying	the --read-only	flag, the con-
       tainers root filesystem are mounted read-only prohibiting any writes.

   --read-only-tmpfs
       When running --read-only	containers, mount a read-write tmpfs on	 /dev,
       /dev/shm, /run, /tmp, and /var/tmp. The default is true.

       +-------------+-------------------+-----+----------------------+
       | --read-only | --read-only-tmpfs | /   | /run, /tmp, /var/tmp |
       +-------------+-------------------+-----+----------------------+
       | true	     | true		 | r/o | r/w		      |
       +-------------+-------------------+-----+----------------------+
       | true	     | false		 | r/o | r/o		      |
       +-------------+-------------------+-----+----------------------+
       | false	     | false		 | r/w | r/w		      |
       +-------------+-------------------+-----+----------------------+
       | false	     | true		 | r/w | r/w		      |
       +-------------+-------------------+-----+----------------------+

       When  --read-only=true  and --read-only-tmpfs=true additional tmpfs are
       mounted on the /tmp, /run, and /var/tmp directories.

       When --read-only=true and --read-only-tmpfs=false /dev and /dev/shm are
       marked Read/Only	and no tmpfs are mounted on /tmp, /run	and  /var/tmp.
       The directories are exposed from	the underlying image, meaning they are
       read-only  by  default.	This makes the container totally read-only. No
       writable	directories exist within the container.	In this	mode  writable
       directories need	to be added via	external volumes or mounts.

       By   default,   when  --read-only=false,	 the  /dev  and	 /dev/shm  are
       read/write, and the /tmp, /run, and /var/tmp are	read/write directories
       from the	container image.

   --replace
       If another container with the same name already exists, replace and re-
       move it.	The default is false.

   --requires=container
       Specify one or more requirements.  A requirement	is a  dependency  con-
       tainer that is started before this container.  Containers can be	speci-
       fied by name or ID, with	multiple containers being separated by commas.

   --restart=policy
       Restart policy to follow	when containers	exit.  Restart policy does not
       take  effect  if	 a  container is stopped via the podman	kill or	podman
       stop commands.

       Valid policy values are:

        no			  : Do not restart containers on exit

        never			  : Synonym for	no; do not restart  containers
	 on exit

        on-failure[:max_retries]  :  Restart containers when they exit	with a
	 non-zero exit code,  retrying	indefinitely  or  until	 the  optional
	 max_retries count is hit

        always			  : Restart containers when they exit, regard-
	 less of status, retrying indefinitely

        unless-stopped		  : Identical to always

       Podman  provides	 a  systemd  unit  file, podman-restart.service, which
       restarts	containers after a system reboot.

       When running containers in systemd services, use	the restart  function-
       ality provided by systemd.  In other words, do not use this option in a
       container unit, instead set the Restart=	systemd	directive in the [Ser-
       vice] section.  See podman-systemd.unit(5) and systemd.service(5).

   --retry=attempts
       Number of times to retry	pulling	or pushing images between the registry
       and local storage in case of failure. Default is	3.

   --retry-delay=duration
       Duration	of delay between retry attempts	when pulling or	pushing	images
       between	the registry and local storage in case of failure. The default
       is to start at two seconds and then exponentially back off.  The	 delay
       is used when this value is set, and no exponential back off occurs.

   --rm
       Automatically remove the	container and any anonymous unnamed volume as-
       sociated	with the container when	it exits. The default is false.

   --rmi
       After  exit of the container, remove the	image unless another container
       is using	it. Implies --rm on the	new container. The default is false.

   --rootfs
       If specified, the first argument	refers to an exploded container	on the
       file system.

       This is useful to run a container without requiring any	image  manage-
       ment, the rootfs	of the container is assumed to be managed externally.

       Overlay Rootfs Mounts

       The :O flag tells Podman	to mount the directory from the	rootfs path as
       storage using the overlay file system. The container processes can mod-
       ify  content  within  the  mount	point which is stored in the container
       storage in a separate directory.	In overlay terms, the source directory
       is the lower, and the container storage directory is the	upper. Modifi-
       cations to the mount point are destroyed	when  the  container  finishes
       executing, similar to a tmpfs mount point being unmounted.

       Note:  On SELinux systems, the rootfs needs the correct label, which is
       by default unconfined_u:object_r:container_file_t:s0.

       idmap

       If idmap	is specified, create an	idmapped  mount	 to  the  target  user
       namespace in the	container.  The	idmap option supports a	custom mapping
       that  can  be  different	than the user namespace	used by	the container.
       The  mapping  can  be  specified	  after	  the	idmap	option	 like:
       idmap=uids=0-1-10#10-11-10;gids=0-100-10.   For each triplet, the first
       value is	the start of the backing file system IDs that  are  mapped  to
       the  second  value on the host.	The length of this mapping is given in
       the third value.	 Multiple ranges are separated with #.

   --sdnotify=container	| conmon | healthy | ignore
       Determines how to use the NOTIFY_SOCKET,	as  passed  with  systemd  and
       Type=notify.

       Default	is  container,	which means allow the OCI runtime to proxy the
       socket into the container to receive ready  notification.  Podman  sets
       the  MAINPID  to	 conmon's pid.	The conmon option sets MAINPID to con-
       mon's pid, and sends READY when the container has started.  The	socket
       is  never  passed  to the runtime or the	container.  The	healthy	option
       sets MAINPID to conmon's	pid, and sends READY when  the	container  has
       turned  healthy;	 requires a healthcheck	to be set. The socket is never
       passed to the runtime or	the container.	The ignore option removes  NO-
       TIFY_SOCKET  from  the  environment for itself and child	processes, for
       the case	where some other process above Podman uses  NOTIFY_SOCKET  and
       Podman does not use it.

   --seccomp-policy=policy
       Specify the policy to select the	seccomp	profile. If set	to image, Pod-
       man looks for a "io.containers.seccomp.profile" label in	the container-
       image  config and use its value as a seccomp profile. Otherwise,	Podman
       follows the default policy by applying the default profile unless spec-
       ified otherwise via --security-opt seccomp as described below.

       Note that this feature is experimental and may change in	the future.

   --secret=secret[,opt=opt ...]
       Give the	container access to a secret. Can be specified multiple	times.

       A secret	is a blob of sensitive data which a container needs at runtime
       but is not stored in the	image or in source control, such as  usernames
       and  passwords,	TLS certificates and keys, SSH keys or other important
       generic strings or binary content (up to	500 kb in size).

       When secrets are	specified as type mount, the secrets  are  copied  and
       mounted	into  the container when a container is	created.  When secrets
       are specified as	type env, the secret is	set as an environment variable
       within the container.  Secrets are written in the container at the time
       of container creation, and modifying the	 secret	 using	podman	secret
       commands	 after	the container is created affects the secret inside the
       container.

       Secrets and its storage are managed using the podman secret command.

       Secret Options

        type=mount|env	   : How the secret is exposed to the container.
			     mount mounts the secret into the container	 as  a
	 file.
			     env  exposes  the	secret as an environment vari-
	 able.
			     Defaults to mount.

        target=target	   : Target of secret.
			     For mounted secrets, this is the path to the  se-
	 cret inside the container.
			     If	a fully	qualified path is provided, the	secret
	 is mounted at that location.
			     Otherwise,	the secret is mounted to
			     /run/secrets/target for linux containers or
			     /var/run/secrets/target for freebsd containers.
			     If	 the  target is	not set, the secret is mounted
	 to /run/secrets/secretname by default.
			     For env secrets, this is the environment variable
	 key. Defaults to secretname.

        uid=0		   : UID of secret. Defaults to	0. Mount  secret  type
	 only.

        gid=0		    :  GID of secret. Defaults to 0. Mount secret type
	 only.

        mode=0		   : Mode of secret. Defaults to  0444.	 Mount	secret
	 type only.

       Examples

       Mount at	/my/location/mysecret with UID 1:

       --secret	mysecret,target=/my/location/mysecret,uid=1

       Mount at	/run/secrets/customtarget with mode 0777:

       --secret	mysecret,target=customtarget,mode=0777

       Create a	secret environment variable called ENVSEC:

       --secret	mysecret,type=env,target=ENVSEC

   --security-opt=option
       Security	Options

        apparmor=unconfined : Turn off	apparmor confinement for the container

        apparmor=alternate-profile : Set the apparmor confinement profile for
	 the container

        label=user:USER: Set the label	user for the container processes

        label=role:ROLE: Set the label	role for the container processes

        label=type:TYPE:  Set	the  label  process  type  for	the  container
	 processes

        label=level:LEVEL: Set	the label level	for the	container processes

        label=filetype:TYPE: Set the label file type for the container	files

        label=disable:	Turn off label separation for the container

       Note: Labeling can be  disabled	for  all  containers  by  setting  la-
       bel=false  in  the  containers.conf (/etc/containers/containers.conf or
       $HOME/.config/containers/containers.conf) file.

        label=nested: Allows SELinux modifications within the container. Con-
	 tainers are allowed to	modify SELinux labels on files and  processes,
	 as  long  as  SELinux	policy allows. Without nested, containers view
	 SELinux as disabled, even when	it is enabled on the host.  Containers
	 are prevented from setting any	labels.

        mask=/path/1:/path/2:	The  paths  to	mask  separated	 by a colon. A
	 masked	path cannot be accessed	inside the container.

        no-new-privileges: Disable container  processes  from	gaining	 addi-
	 tional	privileges.

        seccomp=unconfined: Turn off seccomp confinement for the container.

        seccomp=profile.json:	JSON file to be	used as	a seccomp filter. Note
	 that the io.podman.annotations.seccomp	annotation  is	set  with  the
	 specified value as shown in podman inspect.

        proc-opts=OPTIONS  :  Comma-separated	list of	options	to use for the
	 /proc mount. More details for the possible mount options  are	speci-
	 fied in the proc(5) man page.

        unmask=ALL  or	 /path/1:/path/2,  or  shell expanded paths (/proc/*):
	 Paths to unmask separated by a	colon. If set to ALL, it  unmasks  all
	 the  paths that are masked or made read-only by default.  The default
	 masked	 paths	are  /proc/acpi,  /proc/kcore,	/proc/keys,  /proc/la-
	 tency_stats,	 /proc/sched_debug,    /proc/scsi,   /proc/timer_list,
	 /proc/timer_stats,  /sys/firmware,  and   /sys/fs/selinux,   /sys/de-
	 vices/virtual/powercap.   The	default	 paths	that are read-only are
	 /proc/asound, /proc/bus, /proc/fs, /proc/irq, /proc/sys, /proc/sysrq-
	 trigger, /sys/fs/cgroup.

       Note: Labeling can be  disabled	for  all  containers  by  setting  la-
       bel=false in the	containers.conf(5) file.

   --shm-size=number[unit]
       Size   of  /dev/shm.  A	unit  can  be  b  (bytes),  k  (kibibytes),  m
       (mebibytes), or g (gibibytes).  If the unit is omitted, the system uses
       bytes. If the size is omitted, the default is 64m.   When  size	is  0,
       there  is  no  limit  on	 the amount of memory used for IPC by the con-
       tainer.	This option conflicts with --ipc=host.

   --shm-size-systemd=number[unit]
       Size  of	 systemd-specific  tmpfs  mounts  such	as  /run,   /run/lock,
       /var/log/journal	 and  /tmp.  A unit can	be b (bytes), k	(kibibytes), m
       (mebibytes), or g (gibibytes).  If the unit is omitted, the system uses
       bytes. If the size is omitted, the default is 64m.  When	size is	0, the
       usage is	limited	to 50% of the host's available memory.

   --sig-proxy
       Proxy received signals  to  the	container  process.  SIGCHLD,  SIGURG,
       SIGSTOP,	and SIGKILL are	not proxied.

       The default is true.

   --stop-signal=signal
       Signal to stop a	container. Default is SIGTERM.

   --stop-timeout=seconds
       Timeout to stop a container. Default is 10.  Remote connections use lo-
       cal containers.conf for defaults.

   --subgidname=name
       Run  the	 container  in a new user namespace using the map with name in
       the /etc/subgid file.  If running rootless, the user needs to have  the
       right  to  use  the  mapping.  See subgid(5).  This flag	conflicts with
       --userns	and --gidmap.

   --subuidname=name
       Run the container in a new user namespace using the map	with  name  in
       the  /etc/subuid	file.  If running rootless, the	user needs to have the
       right to	use the	mapping. See  subuid(5).   This	 flag  conflicts  with
       --userns	and --uidmap.

   --sysctl=name=value
       Configure namespaced kernel parameters at runtime.

       For the IPC namespace, the following sysctls are	allowed:

        kernel.msgmax

        kernel.msgmnb

        kernel.msgmni

        kernel.sem

        kernel.shmall

        kernel.shmmax

        kernel.shmmni

        kernel.shm_rmid_forced

        Sysctls beginning with	fs.mqueue.*

       Note:  if  using	 the  --ipc=host option, the above sysctls are not al-
       lowed.

       For the network namespace, only sysctls beginning with  net.*  are  al-
       lowed.

       Note: if	using the --network=host option, the above sysctls are not al-
       lowed.

   --systemd=true | false | always
       Run container in	systemd	mode. The default is true.

        true  enables	systemd	mode only when the command executed inside the
	 container  is	systemd,  /usr/sbin/init,   /sbin/init	 or   /usr/lo-
	 cal/sbin/init.

        false disables	systemd	mode.

        always	enforces the systemd mode to be	enabled.

       Running the container in	systemd	mode causes the	following changes:

        Podman	mounts tmpfs file systems on the following directories

	  /run

	  /run/lock

	  /tmp

	  /sys/fs/cgroup/systemd (on a	cgroup v1 system)

	  /var/lib/journal

        Podman	sets the default stop signal to	SIGRTMIN+3.

        Podman	 sets  container_uuid environment variable in the container to
	 the first 32 characters of the	container ID.

        Podman	does not mount virtual	consoles  (/dev/tty\d+)	 when  running
	 with --privileged.

        On cgroup v2, /sys/fs/cgroup is mounted writeable.

       This  allows systemd to run in a	confined container without any modifi-
       cations.

       Note that on SELinux systems, systemd attempts to write to  the	cgroup
       file system. Containers writing to the cgroup file system are denied by
       default.	  The container_manage_cgroup boolean must be enabled for this
       to be allowed on	an SELinux separated system.

       setsebool -P container_manage_cgroup true

   --timeout=seconds
       Maximum time a container	is allowed to run before conmon	sends  it  the
       kill  signal.  By default containers run	until they exit	or are stopped
       by podman stop.

   --tls-verify
       Require HTTPS and verify	certificates when contacting  registries  (de-
       fault: true).  If explicitly set	to true, TLS verification is used.  If
       set to false, TLS verification is not used.  If not specified, TLS ver-
       ification  is  used unless the target registry is listed	as an insecure
       registry	in containers-registries.conf(5)

   --tmpfs=fs
       Create a	tmpfs mount.

       Mount a temporary filesystem (tmpfs) mount into a container, for	 exam-
       ple:

       $ podman	run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image

       This command mounts a tmpfs at /tmp within the container. The supported
       mount  options are the same as the Linux	default	mount flags. If	no op-
       tions  are  specified,  the  system   uses   the	  following   options:
       rw,noexec,nosuid,nodev.

   --tty, -t
       Allocate	a pseudo-TTY. The default is false.

       When set	to true, Podman	allocates a pseudo-tty and attach to the stan-
       dard  input  of	the container. This can	be used, for example, to run a
       throwaway interactive shell.

       NOTE: The --tty flag prevents redirection of standard output.  It  com-
       bines  STDOUT  and STDERR, it can insert	control	characters, and	it can
       hang pipes. This	option is only used when run interactively in a	termi-
       nal. When feeding input to Podman, use -i only, not -it.

       echo "asdf" | podman run	--rm -i	someimage /bin/cat

   --tz=timezone
       Set timezone in container. This flag takes  area-based  timezones,  GMT
       time,  as  well	as  local, which sets the timezone in the container to
       match the host machine. See /usr/share/zoneinfo/	for  valid  timezones.
       Remote connections use local containers.conf for	defaults

   --uidmap=[flags]container_uid:from_uid[:amount]
       Run  the	 container in a	new user namespace using the supplied UID map-
       ping. This option conflicts with	the --userns and --subuidname options.
       This option provides a way to map host UIDs to container	UIDs.  It  can
       be passed several times to map different	ranges.

       The possible values of the optional flags are discussed further down on
       this  page.   The  amount  value	is optional and	assumed	to be 1	if not
       given.

       The from_uid value is based upon	the user running the  command,	either
       rootful or rootless users.

        rootful user:	[flags]container_uid:host_uid[:amount]

        rootless user:	[flags]container_uid:intermediate_uid[:amount]

       Rootful mappings

       When  podman  run  is  called by	a privileged user, the option --uidmap
       works as	a direct mapping between host UIDs and container UIDs.

       host UID	-> container UID

       The amount specifies the	number of consecutive UIDs that	is mapped.  If
       for example amount is 4 the mapping looks like:

       +--------------+-------------------+
       | host UID     |	container UID	  |
       +--------------+-------------------+
       | from_uid     |	container_uid	  |
       +--------------+-------------------+
       | from_uid + 1 |	container_uid +	1 |
       +--------------+-------------------+
       | from_uid + 2 |	container_uid +	2 |
       +--------------+-------------------+
       | from_uid + 3 |	container_uid +	3 |
       +--------------+-------------------+

       Rootless	mappings

       When podman run is called by an unprivileged user (i.e.	running	 root-
       less),  the  value from_uid is interpreted as an	"intermediate UID". In
       the rootless case, host UIDs are	not mapped directly to container UIDs.
       Instead the mapping happens over	two mapping steps:

       host UID	-> intermediate	UID -> container UID

       The --uidmap option only	influences the second mapping step.

       The first mapping step is derived by Podman from	the  contents  of  the
       file /etc/subuid	and the	UID of the user	calling	Podman.

       First mapping step:

       +---------------------+------------------+
       | host UID	     | intermediate UID	|
       +---------------------+------------------+
       | UID for Podman	user | 0		|
       +---------------------+------------------+
       | 1st subordinate UID | 1		|
       +---------------------+------------------+
       | 2nd subordinate UID | 2		|
       +---------------------+------------------+
       | 3rd subordinate UID | 3		|
       +---------------------+------------------+
       | nth subordinate UID | n		|
       +---------------------+------------------+

       To  be  able to use intermediate	UIDs greater than zero,	the user needs
       to have subordinate UIDs	configured in /etc/subuid. See subuid(5).

       The second mapping step is configured with --uidmap.

       If for example amount is	5 the second mapping step looks	like:

       +------------------+-------------------+
       | intermediate UID | container UID     |
       +------------------+-------------------+
       | from_uid	  | container_uid     |
       +------------------+-------------------+
       | from_uid + 1	  | container_uid + 1 |
       +------------------+-------------------+
       | from_uid + 2	  | container_uid + 2 |
       +------------------+-------------------+
       | from_uid + 3	  | container_uid + 3 |
       +------------------+-------------------+
       | from_uid + 4	  | container_uid + 4 |
       +------------------+-------------------+

       When running as rootless, Podman	uses all the ranges configured in  the
       /etc/subuid file.

       The  current user ID is mapped to UID=0 in the rootless user namespace.
       Every additional	range is added sequentially afterward:

       +-----------------------+-------------------------+----------------------+
       | host		       | rootless user namespace | length		|
       +-----------------------+-------------------------+----------------------+
       | $UID		       | 0			 | 1			|
       +-----------------------+-------------------------+----------------------+
       | 1		       | $FIRST_RANGE_ID	 | $FIRST_RANGE_LENGTH	|
       +-----------------------+-------------------------+----------------------+
       | 1+$FIRST_RANGE_LENGTH | $SECOND_RANGE_ID	 | $SECOND_RANGE_LENGTH	|
       +-----------------------+-------------------------+----------------------+

       Referencing a host ID from the parent namespace

       As a rootless user, the given host ID in	--uidmap or --gidmap is	mapped
       from the	intermediate namespace generated by Podman.  Sometimes	it  is
       desirable  to  refer  directly at the host namespace. It	is possible to
       manually	do so, by running podman unshare cat /proc/self/gid_map, find-
       ing the desired host id at the second column of the output, and getting
       the corresponding intermediate id from the first	column.

       Podman can perform all that by preceding	the host  id  in  the  mapping
       with the	@ symbol. For instance,	by specifying --gidmap 100000:@2000:1,
       podman  will  look up the intermediate id corresponding to host id 2000
       and it will map the found intermediate id to the	container  id  100000.
       The  given  host	id must	have been subordinated (otherwise it would not
       be mapped into the intermediate space in	the first place).

       If  the	length	is  greater  than  one,	 for  instance	with  --gidmap
       100000:@2000:2,	Podman	will  map host ids 2000	and 2001 to 100000 and
       100001, respectively, regardless	of how the intermediate	mapping	is de-
       fined.

       Extending previous mappings

       Some mapping modifications may be  cumbersome.  For  instance,  a  user
       starts  with  a	mapping	such as	--gidmap="0:0:65000", that needs to be
       changed such as the parent id 1000 is mapped to container id 100000 in-
       stead, leaving container	id 1 unassigned.  The  corresponding  --gidmap
       becomes --gidmap="0:0:1"	--gidmap="2:2:65534" --gidmap="100000:1:1".

       This  notation  can  be simplified using	the + flag, that takes care of
       breaking	previous mappings removing any conflicting assignment with the
       given mapping. The flag is given	before the container  id  as  follows:
       --gidmap="0:0:65000" --gidmap="+100000:1:1"

       +------+-------------+-----------------------------+
       | Flag |	Example	    | Description		  |
       +------+-------------+-----------------------------+
       | +    |	+100000:1:1 | Extend the previous mapping |
       +------+-------------+-----------------------------+

       This  notation leads to gaps in the assignment, so it may be convenient
       to     fill     those	 gaps	  afterwards:	  --gidmap="0:0:65000"
       --gidmap="+100000:1:1" --gidmap="1:65001:1"

       One  specific  use  case	 for  this  flag is in the context of rootless
       users. A	rootless user may specify mappings  with  the  +  flag	as  in
       --gidmap="+100000:1:1".	Podman will then "fill the gaps" starting from
       zero with all the remaining intermediate	ids. This is convenient	when a
       user wants to map a specific intermediate id to a container id, leaving
       the rest	of subordinate ids to be mapped	by Podman at will.

       Passing only one	of --uidmap or --gidmap

       Usually,	subordinated user and group ids	are  assigned  simultaneously,
       and for any user	the subordinated user ids match	the subordinated group
       ids.   For  convenience,	 if only one of	--uidmap or --gidmap is	given,
       podman assumes the mapping refers to both UIDs and GIDs and applies the
       given mapping to	both. If only  one  value  of  the  two	 needs	to  be
       changed,	 the  mappings	should include the u or	the g flags to specify
       that they only apply to UIDs or GIDs and	should not be copied over.

       +------+---------------+---------------------+
       | flag |	Example	      |	Description	    |
       +------+---------------+---------------------+
       | u    |	u20000:2000:1 |	The  mapping   only |
       |      |		      |	applies	to UIDs	    |
       +------+---------------+---------------------+
       | g    |	g10000:1000:1 |	The   mapping  only |
       |      |		      |	applies	to GIDs	    |
       +------+---------------+---------------------+

       For instance given the command

       podman run --gidmap "0:0:1000" --gidmap "g2000:2000:1"

       Since no	--uidmap is given, the --gidmap	is copied to --uidmap,	giving
       a command equivalent to

       podman run --gidmap "0:0:1000" --gidmap "2000:2000:1" --uidmap "0:0:1000"

       The  --gidmap  "g2000:2000:1"  used the g flag and therefore it was not
       copied to --uidmap.

       Rootless	mapping	of additional host GIDs

       A rootless user may desire to map a specific host group	that  has  al-
       ready  been subordinated	within /etc/subgid without specifying the rest
       of the mapping.

       This can	be done	with --gidmap "+gcontainer_gid:@host_gid"

       Where:

        The host GID is given through the @ symbol

        The mapping of	this GID is not	copied over to --usermap thanks	to the
	 g flag.

        The rest of the container IDs will be mapped starting from  0	to  n,
	 with all the remaining	subordinated GIDs, thanks to the + flag.

       For  instance,  if  a  user belongs to the group	2000 and that group is
       subordinated to that user (with usermod --add-subgids 2000-2000 $USER),
       the   user   can	  map	the   group   into   the    container	 with:
       --gidmap=+g100000:@2000.

       If  this	 mapping is combined with the option, --group-add=keep-groups,
       the process in the container will belong	to group 100000, and files be-
       longing to group	2000 in	the host will appear as	being owned  by	 group
       100000 inside the container.

       podman run --group-add=keep-groups --gidmap="+g100000:@2000" ...

       No subordinate UIDs

       Even  if	 a  user  does	not have any subordinate UIDs in  /etc/subuid,
       --uidmap	can be used to map the normal UID of the user to  a  container
       UID  by	running	 podman	 run  --uidmap $container_uid:0:1 --user $con-
       tainer_uid ....

       Pods

       The --uidmap option cannot be called in conjunction with	the --pod  op-
       tion as a uidmap	cannot be set on the container level when in a pod.

   --ulimit=option
       Ulimit options. Sets the	ulimits	values inside of the container.

       --ulimit	with a soft and	hard limit in the format =[:]. For example:

       $ podman	run --ulimit nofile=1024:1024 --rm ubi9	ulimit -n 1024

       Set -1 for the soft or hard limit to set	the limit to the maximum limit
       of the current process. In rootful mode this is often unlimited.

       If nofile and nproc are unset, a	default	value of 1048576 will be used,
       unless overridden in containers.conf(5).	 However, if the default value
       exceeds	the hard limit for the current rootless	user, the current hard
       limit will be applied instead.

       Use host	to copy	the current configuration from the host.

       Don't use nproc with the	ulimit flag as Linux uses  nproc  to  set  the
       maximum number of processes available to	a user,	not to a container.

       Use  the	 --pids-limit option to	modify the cgroup control to limit the
       number of processes within a container.

   --umask=umask
       Set the umask inside the	container. Defaults to 0022.   Remote  connec-
       tions use local containers.conf for defaults

   --unsetenv=env
       Unset default environment variables for the container. Default environ-
       ment  variables include variables provided natively by Podman, environ-
       ment variables configured by the	image, and environment variables  from
       containers.conf.

   --unsetenv-all
       Unset  all default environment variables	for the	container. Default en-
       vironment variables include variables provided natively by Podman,  en-
       vironment  variables configured by the image, and environment variables
       from containers.conf.

   --user, -u=user[:group]
       Sets the	username or UID	used and, optionally, the groupname or GID for
       the specified command. Both user	and group may be symbolic or numeric.

       Without this argument, the command runs as the user  specified  in  the
       container  image. Unless	overridden by a	USER command in	the Container-
       file or by a value passed to this option, this user generally  defaults
       to root.

       When  a	user  namespace	is not in use, the UID and GID used within the
       container and on	the host match.	When user namespaces are in use,  how-
       ever,  the  UID	and GID	in the container may correspond	to another UID
       and GID on the host. In rootless	containers, for	example, a user	 name-
       space  is always	used, and root in the container	by default corresponds
       to the UID and GID of the user invoking Podman.

   --userns=mode
       Set the user namespace mode for the container.

       If --userns is not set, the default value is determined as follows.   -
       If  --pod is set, --userns is ignored and the user namespace of the pod
       is used.	 - If the environment variable PODMAN_USERNS is	set its	 value
       is  used.   -  If  userns is specified in containers.conf this value is
       used.  -	Otherwise, --userns=host is assumed.

       --userns="" (i.e., an empty string) is an alias for --userns=host.

       This option is incompatible with	--gidmap, --uidmap,  --subuidname  and
       --subgidname.

       Rootless	user --userns=Key mappings:

       +-------------------------+-----------+---------------------+
       | Key			 | Host	User | Container User	   |
       +-------------------------+-----------+---------------------+
       | auto			 | $UID	     | nil  (Host User UID |
       |			 |	     | is not mapped  into |
       |			 |	     | container.)	   |
       +-------------------------+-----------+---------------------+
       | host			 | $UID	     | 0 (Default User ac- |
       |			 |	     | count   mapped	to |
       |			 |	     | root user  in  con- |
       |			 |	     | tainer.)		   |
       +-------------------------+-----------+---------------------+
       | keep-id		 | $UID	     | $UID  (Map user ac- |
       |			 |	     | count to	 same  UID |
       |			 |	     | within container.)  |
       +-------------------------+-----------+---------------------+
       | keep-id:uid=200,gid=210 | $UID	     | 200:210	(Map  user |
       |			 |	     | account	to  speci- |
       |			 |	     | fied UID, GID value |
       |			 |	     | within container.)  |
       +-------------------------+-----------+---------------------+
       | nomap			 | $UID	     | nil  (Host User UID |
       |			 |	     | is not mapped  into |
       |			 |	     | container.)	   |
       +-------------------------+-----------+---------------------+

       Valid mode values are:

       auto[:OPTIONS,...]: automatically create	a unique user namespace.

        rootful mode: The --userns=auto flag requires that the	user name con-
	 tainers  be  specified	in the /etc/subuid and /etc/subgid files, with
	 an unused range of subordinate	user IDs that  Podman  containers  are
	 allowed to allocate.

	       Example:	containers:2147483647:2147483648.

        rootless  mode:  The users range from the /etc/subuid and /etc/subgid
	 files will be used. Note running a  single  container	without	 using
	 --userns=auto will use	the entire range of UIDs and not allow further
	 subdividing. See subuid(5).

       Podman  allocates  unique  ranges  of UIDs and GIDs from	the containers
       subordinate user	IDs. The size of the ranges is based on	the number  of
       UIDs required in	the image. The number of UIDs and GIDs can be overrid-
       den with	the size option.

       The  option  --userns=keep-id  uses  all	the subuids and	subgids	of the
       user.  The option --userns=nomap	uses all the subuids  and  subgids  of
       the  user  except the user's own	ID.  Using --userns=auto when starting
       new containers does not work as long as any containers exist that  were
       started with --userns=keep-id or	--userns=nomap.

       Valid auto options:

        gidmapping=CONTAINER_GID:HOST_GID:SIZE:  to force a GID mapping to be
	 present in the	user namespace.

        size=SIZE: to specify an explicit size	for the	automatic  user	 name-
	 space.	 e.g.  --userns=auto:size=8192.	If size	is not specified, auto
	 estimates a size for the user namespace.

        uidmapping=CONTAINER_UID:HOST_UID:SIZE: to force a UID	mapping	to  be
	 present in the	user namespace.

       The  host  UID  and  GID	in gidmapping and uidmapping can optionally be
       prefixed	with the @ symbol.  In this case, podman will look up the  in-
       termediate ID corresponding to host ID and it will map the found	inter-
       mediate ID to the container id.	For details see	--uidmap.

       container:id: join the user namespace of	the specified container.

       host or "" (empty string): run in the user namespace of the caller. The
       processes running in the	container have the same	privileges on the host
       as any other process launched by	the calling user.

       keep-id:	 creates a user	namespace where	the current user's UID:GID are
       mapped to the same values in the	container. For containers  created  by
       root, the current mapping is created into a new user namespace.

       Valid keep-id options:

        uid=UID:  override  the  UID inside the container that	is used	to map
	 the current user to.

        gid=GID: override the GID inside the container	that is	 used  to  map
	 the current user to.

       nomap:  creates	a  user	 namespace  where  the current rootless	user's
       UID:GID are not mapped into the container. This option is  not  allowed
       for containers created by the root user.

       ns:namespace: run the container in the given existing user namespace.

   --uts=mode
       Set  the	UTS namespace mode for the container. The following values are
       supported:

        host: use the host's UTS namespace inside the container.

        private: create a new namespace for the container (default).

        ns:[path]: run	the container in the given existing UTS	namespace.

        container:[container]:	join the UTS namespace of the  specified  con-
	 tainer.

   --variant=VARIANT
       Use  VARIANT  instead  of  the default architecture variant of the con-
       tainer image. Some images can use multiple variants of the  arm	archi-
       tectures, such as arm/v5	and arm/v7.

   --volume, -v=[[SOURCE-VOLUME|HOST-DIR:]CONTAINER-DIR[:OPTIONS]]
       Create  a bind mount. If	-v /HOST-DIR:/CONTAINER-DIR is specified, Pod-
       man bind	mounts /HOST-DIR from the host into /CONTAINER-DIR in the Pod-
       man container. Similarly, -v  SOURCE-VOLUME:/CONTAINER-DIR  mounts  the
       named  volume from the host into	the container. If no such named	volume
       exists, Podman creates one. If no source	is given, the volume  is  cre-
       ated as an anonymously named volume with	a randomly generated name, and
       is  removed when	the container is removed via the --rm flag or the pod-
       man rm --volumes	command.

       (Note when using	the remote client, including Mac and Windows  (exclud-
       ing WSL2) machines, the volumes are mounted from	the remote server, not
       necessarily the client machine.)

       The OPTIONS is a	comma-separated	list and can be	one or more of:

        rw|ro

        z|Z

        [O]

        [U]

        [no]copy

        [no]dev

        [no]exec

        [no]suid

        [r]bind

        [r]shared|[r]slave|[r]private[r]unbindable [1]	<#Footnote1>

        idmap[=options]

       The  CONTAINER-DIR must be an absolute path such	as /src/docs. The vol-
       ume is mounted into the container at this directory.

       If a volume source is specified,	it must	be a path on the host  or  the
       name  of	a named	volume.	Host paths are allowed to be absolute or rela-
       tive; relative paths are	resolved relative to the directory  Podman  is
       run  in.	 If  the source	does not exist,	Podman returns an error. Users
       must pre-create the source files	or directories.

       Any source that does not	begin with a . or / is treated as the name  of
       a  named	 volume. If a volume with that name does not exist, it is cre-
       ated.  Volumes created with names are not anonymous, and	they  are  not
       removed by the --rm option and the podman rm --volumes command.

       Specify	multiple  -v  options to mount one or more volumes into	a con-
       tainer.

       Write Protected Volume Mounts

       Add :ro or :rw option to	mount a	 volume	 in  read-only	or  read-write
       mode,  respectively.  By	 default,  the volumes are mounted read-write.
       See examples.

       Chowning	Volume Mounts

       By default, Podman does not change the owner and	group of source	volume
       directories mounted into	containers. If a container is created in a new
       user namespace, the UID and GID in the container	may correspond to  an-
       other UID and GID on the	host.

       The :U suffix tells Podman to use the correct host UID and GID based on
       the  UID	 and GID within	the container, to change recursively the owner
       and group of the	source volume. Chowning	walks the  file	 system	 under
       the  volume  and	 changes  the  UID/GID on each file. If	the volume has
       thousands of inodes, this process takes a long time, delaying the start
       of the container.

       Warning use with	caution	since this modifies the	host filesystem.

       Labeling	Volume Mounts

       Labeling	systems	like SELinux require that proper labels	are placed  on
       volume  content mounted into a container. Without a label, the security
       system might prevent the	processes running inside  the  container  from
       using the content. By default, Podman does not change the labels	set by
       the OS.

       To  change a label in the container context, add	either of two suffixes
       :z or :Z	to the volume mount. These suffixes  tell  Podman  to  relabel
       file  objects on	the shared volumes. The	z option tells Podman that two
       or more containers share	the volume content. As a result, Podman	labels
       the content with	a shared content label.	Shared volume labels allow all
       containers to read/write	content. The Z option tells  Podman  to	 label
       the  content  with  a private unshared label Only the current container
       can use a private volume. Note: all containers within a pod  share  the
       same  SELinux  label.  This  means  all	containers within said pod can
       read/write volumes shared into the container created with the :Z	on any
       of one the containers. Relabeling walks the file	system under the  vol-
       ume  and	changes	the label on each file,	if the volume has thousands of
       inodes, this process takes a long time, delaying	the start of the  con-
       tainer.	If the volume was previously relabeled with the	z option, Pod-
       man is optimized	to not relabel a second	time. If files are moved  into
       the  volume,  then the labels can be manually change with the chcon -Rt
       container_file_t	PATH command.

       Note: Do	not relabel system files and  directories.  Relabeling	system
       content	might  cause  other  confined services on the machine to fail.
       For these types of containers we	recommend  disabling  SELinux  separa-
       tion.  The option --security-opt	label=disable disables SELinux separa-
       tion  for  the container.  For example if a user	wanted to volume mount
       their entire home directory into	a  container,  they  need  to  disable
       SELinux separation.

       $ podman	run --security-opt label=disable -v $HOME:/home/user fedora touch /home/user/file

       Overlay Volume Mounts

       The :O flag tells Podman	to mount the directory from the	host as	a tem-
       porary  storage	using the overlay file system. The container processes
       can modify content within the mountpoint	which is stored	 in  the  con-
       tainer  storage	in  a separate directory. In overlay terms, the	source
       directory is the	lower, and the container storage directory is the  up-
       per.  Modifications to the mount	point are destroyed when the container
       finishes	executing, similar to a	tmpfs mount point being	unmounted.

       For advanced users,  the	 overlay  option  also	supports  custom  non-
       volatile	 upperdir  and	workdir	for the	overlay	mount. Custom upperdir
       and workdir can be fully	managed	by the users  themselves,  and	Podman
       does   not   remove   it	  on  lifecycle	 completion.   Example	:O,up-
       perdir=/some/upper,workdir=/some/work

       Subsequent executions of	the container sees the original	source	direc-
       tory  content, any changes from previous	container executions no	longer
       exist.

       One use case of the overlay mount is sharing the	package	cache from the
       host into the container to allow	speeding up builds.

       Note: The O flag	conflicts with other options listed above.

       Content mounted into the	container is labeled with the  private	label.
       On  SELinux systems, labels in the source directory must	be readable by
       the   container	label.	Usually	 containers  can   read/execute	  con-
       tainer_share_t and can read/write container_file_t. If unable to	change
       the  labels  on	a  source volume, SELinux container separation must be
       disabled	for the	 container to work.

       Do not modify the source	directory mounted into the container  with  an
       overlay mount, it can cause unexpected failures.	Only modify the	direc-
       tory after the container	finishes running.

       Mounts propagation

       By  default,  bind-mounted  volumes  are	private. That means any	mounts
       done inside the container are not visible on the	host and  vice	versa.
       One  can	 change	this behavior by specifying a volume mount propagation
       property.  When a volume	is shared, mounts done under that  volume  in-
       side  the container are visible on host and vice	versa. Making a	volume
       slave[1]	<#Footnote1> enables only one-way  mount  propagation:	mounts
       done on the host	under that volume are visible inside the container but
       not the other way around.

       To  control  mount  propagation	property  of  a	volume one can use the
       [r]shared, [r]slave, [r]private or the [r]unbindable propagation	 flag.
       Propagation property can	be specified only for bind mounted volumes and
       not  for	 internal  volumes  or named volumes. For mount	propagation to
       work the	source mount point  (the  mount	 point	where  source  dir  is
       mounted	on)  has  to have the right propagation	properties. For	shared
       volumes,	the source mount point has to be shared. And  for  slave  vol-
       umes,  the  source  mount  point	has to be either shared	or slave.  [1]
       <#Footnote1>

       To recursively mount a volume and all of	 its  submounts	 into  a  con-
       tainer,	use  the rbind option. By default the bind option is used, and
       submounts of the	source directory is not	mounted	into the container.

       Mounting	the volume with	a copy option tells  podman  to	 copy  content
       from  the  underlying destination directory onto	newly created internal
       volumes.	The copy only happens on the initial creation of  the  volume.
       Content	is  not	copied up when the volume is subsequently used on dif-
       ferent containers. The copy option is ignored on	bind mounts and	has no
       effect.

       Mounting	volumes	with the nosuid	options	means that SUID	executables on
       the volume can not be used by applications to change  their  privilege.
       By default volumes are mounted with nosuid.

       Mounting	the volume with	the noexec option means	that no	executables on
       the volume can be executed within the container.

       Mounting	 the volume with the nodev option means	that no	devices	on the
       volume can be used by processes within the container. By	 default  vol-
       umes are	mounted	with nodev.

       If  the HOST-DIR	is a mount point, then dev, suid, and exec options are
       ignored by the kernel.

       Use df HOST-DIR to figure out the source	mount,	then  use  findmnt  -o
       TARGET,PROPAGATION  source-mount-dir  to	figure out propagation proper-
       ties of source mount. If	findmnt(1) utility is not available, then  one
       can   look   at	 the  mount  entry  for	 the  source  mount  point  in
       /proc/self/mountinfo. Look at the "optional  fields"  and  see  if  any
       propagation  properties	are  specified.	  In there, shared:N means the
       mount is	shared,	master:N means mount  is  slave,  and  if  nothing  is
       there, the mount	is private. [1]	<#Footnote1>

       To  change  propagation	properties of a	mount point, use mount(8) com-
       mand. For example, if one wants to bind mount  source  directory	 /foo,
       one  can	 do  mount  --bind  /foo /foo and mount	--make-private --make-
       shared /foo. This converts /foo into a  shared  mount  point.  Alterna-
       tively, one can directly	change propagation properties of source	mount.
       Say  / is source	mount for /foo,	then use mount --make-shared / to con-
       vert / into a shared mount.

       Note: if	the user only has access rights	via  a	group,	accessing  the
       volume from inside a rootless container fails.

       Idmapped	mount

       If  idmap  is  specified,  create  an idmapped mount to the target user
       namespace in the	container. The idmap option supports a custom  mapping
       that  can  be  different	than the user namespace	used by	the container.
       The  mapping  can  be  specified	  after	  the	idmap	option	 like:
       idmap=uids=0-1-10#10-11-10;gids=0-100-10.   For each triplet, the first
       value is	the start of the backing file system IDs that  are  mapped  to
       the  second  value on the host.	The length of this mapping is given in
       the third value.	 Multiple ranges are separated with #.

       Use the --group-add keep-groups option to pass the user's supplementary
       group access into the container.

   --volumes-from=CONTAINER[:OPTIONS]
       Mount volumes from the specified	container(s). Used  to	share  volumes
       between containers. The options is a comma-separated list with the fol-
       lowing available	elements:

        rw|ro

        z

       Mounts  already	mounted	 volumes  from a source	container onto another
       container. CONTAINER may	be a name or ID.  To share a volume,  use  the
       --volumes-from option when running the target container.	Volumes	can be
       shared even if the source container is not running.

       By  default,  Podman mounts the volumes in the same mode	(read-write or
       read-only) as it	is mounted in  the  source  container.	 This  can  be
       changed by adding a ro or rw option.

       Labeling	 systems like SELinux require that proper labels are placed on
       volume content mounted into a container.	Without	a label, the  security
       system  might  prevent  the processes running inside the	container from
       using the content. By default, Podman does not change the labels	set by
       the OS.

       To change a label in the	container context, add z to the	volume	mount.
       This suffix tells Podman	to relabel file	objects	on the shared volumes.
       The  z  option tells Podman that	two entities share the volume content.
       As a result, Podman labels the content with  a  shared  content	label.
       Shared volume labels allow all containers to read/write content.

       If  the	location of the	volume from the	source container overlaps with
       data residing on	a target container, then the volume hides that data on
       the target.

   --workdir, -w=dir
       Working directory inside	the container.

       The default working directory for running binaries within  a  container
       is the root directory (/).  The image developer can set a different de-
       fault with the WORKDIR instruction. The operator	can override the work-
       ing directory by	using the -w option.

Exit Status
       The exit	code from podman run gives information about why the container
       failed  to  run or why it exited. When podman run exits with a non-zero
       code, the exit codes follow the chroot(1) standard, see below:

       125 The error is	with Podman itself

       $ podman	run --foo busybox; echo	$?
       Error: unknown flag: --foo
       125

       126 The contained command cannot	be invoked

       $ podman	run busybox /etc; echo $?
       Error: container_linux.go:346: starting container process caused	"exec: \"/etc\": permission denied": OCI runtime error
       126

       127 The contained command cannot	be found

       $ podman	run busybox foo; echo $?
       Error: container_linux.go:346: starting container process caused	"exec: \"foo\":	executable file	not found in $PATH": OCI runtime error
       127

       Exit code contained command exit	code

       $ podman	run busybox /bin/sh -c 'exit 3'; echo $?
       3

EXAMPLES
   Running container in	read-only mode
       During container	image development, containers often need to  write  to
       the  image content. Installing packages into /usr, for example. In pro-
       duction,	applications seldom need to write to the image.	 Container ap-
       plications write	to volumes if they need	to write to  file  systems  at
       all.  Applications can be made more secure by running them in read-only
       mode using the --read-only switch.  This	protects the container's image
       from modification. By default read-only containers can write to	tempo-
       rary data. Podman mounts	a tmpfs	on /run	and /tmp within	the container.

       $ podman	run --read-only	-i -t fedora /bin/bash

       If  the	container  does	 not  write to any file	system within the con-
       tainer, including tmpfs,	set --read-only-tmpfs=false.

       $ podman	run --read-only	--read-only-tmpfs=false	--tmpfs	/run -i	-t fedora /bin/bash

   Exposing shared libraries inside of container as read-only using a glob
       $ podman	run --mount type=glob,src=/usr/lib64/libnvidia\*,ro=true -i -t fedora /bin/bash

   Exposing log	messages from the container to the host's log
       Bind mount the /dev/log directory to have messages that are  logged  in
       the container  show up in the host's syslog/journal.

       $ podman	run -v /dev/log:/dev/log -i -t fedora /bin/bash

       From inside the container test this by sending a	message	to the log.

       (bash)# logger "Hello from my container"

       Then exit and check the journal.

       (bash)# exit

       $ journalctl -b | grep Hello

       This lists the message sent to the logger.

   Attaching to	one or more from STDIN,	STDOUT,	STDERR
       Without	specifying  the	 -a option, Podman attaches everything (stdin,
       stdout, stderr).	 Override the default by specifying -a (stdin, stdout,
       stderr),	as in:

       $ podman	run -a stdin -a	stdout -i -t fedora /bin/bash

   Sharing IPC between containers
       Using		 shm_server.c		  available		 here:
       https://www.cs.cf.ac.uk/Dave/C/node27.html

       Testing --ipc=host mode:

       Host  shows a shared memory segment with	7 pids attached, happens to be
       from httpd:

       $ sudo ipcs -m

       ------ Shared Memory Segments --------
       key	  shmid	     owner	perms	   bytes      nattch	 status
       0x01128e25 0	     root	600	   1000	      7

       Now run a regular container, and	it correctly does NOT see  the	shared
       memory segment from the host:

       $ podman	run -it	shm ipcs -m

       ------ Shared Memory Segments --------
       key	  shmid	     owner	perms	   bytes      nattch	 status

       Run  a  container  with	the new	--ipc=host option, and it now sees the
       shared memory segment from the host httpd:

       $ podman	run -it	--ipc=host shm ipcs -m

       ------ Shared Memory Segments --------
       key	  shmid	     owner	perms	   bytes      nattch	 status
       0x01128e25 0	     root	600	   1000	      7

       Testing --ipc=container:id mode:

       Start a container with a	program	to create a shared memory segment:

       $ podman	run -it	shm bash
       $ sudo shm/shm_server &
       $ sudo ipcs -m

       ------ Shared Memory Segments --------
       key	  shmid	     owner	perms	   bytes      nattch	 status
       0x0000162e 0	     root	666	   27	      1

       Create a	2nd container correctly	shows no shared	 memory	 segment  from
       1st container:

       $ podman	run shm	ipcs -m

       ------ Shared Memory Segments --------
       key	  shmid	     owner	perms	   bytes      nattch	 status

       Create  a  3rd  container  using	 the --ipc=container:id	option,	now it
       shows the shared	memory segment from the	first:

       $ podman	run -it	--ipc=container:ed735b2264ac shm ipcs -m
       $ sudo ipcs -m

       ------ Shared Memory Segments --------
       key	  shmid	     owner	perms	   bytes      nattch	 status
       0x0000162e 0	     root	666	   27	      1

   Mapping Ports for External Usage
       The exposed port	of an application can be mapped	to a host  port	 using
       the  -p	flag.  For example, an httpd port 80 can be mapped to the host
       port 8080 using the following:

       $ podman	run -p 8080:80 -d -i -t	fedora/httpd

   Mounting External Volumes
       To mount	a host directory as a container	volume,	specify	 the  absolute
       path to the directory and the absolute path for the container directory
       separated  by  a	 colon.	 If the	source is a named volume maintained by
       Podman, it is recommended to use	its name rather	than the path  to  the
       volume.	Otherwise  the volume is considered an orphan and wiped	by the
       podman volume prune command:

       $ podman	run -v /var/db:/data1 -i -t fedora bash

       $ podman	run -v data:/data2 -i -t fedora	bash

       $ podman	run -v /var/cache/dnf:/var/cache/dnf:O -ti fedora dnf -y update

       If the container	needs a	writeable mounted volume by a  non  root  user
       inside  the  container,	use  the U option. This	option tells Podman to
       chown the source	volume to match	the default UID	and  GID  used	within
       the container.

       $ podman	run -d -e MARIADB_ROOT_PASSWORD=root --user mysql --userns=keep-id -v ~/data:/var/lib/mysql:Z,U	mariadb

       Alternatively  if  the  container needs a writable volume by a non root
       user inside of the container, the --userns=keep-id option allows	 users
       to  specify  the	 UID  and GID of the user executing Podman to specific
       UIDs and	GIDs within the	container. Since the processes running in  the
       container run as	the user's UID,	they can read/write files owned	by the
       user.

       $ podman	run -d -e MARIADB_ROOT_PASSWORD=root --user mysql --userns=keep-id:uid=999,gid=999 -v ~/data:/var/lib/mysql:Z mariadb

       Using  --mount  flags  to mount a host directory	as a container folder,
       specify the absolute path to the	directory or the volume	name, and  the
       absolute	path within the	container directory:

       $ podman	run --mount type=bind,src=/var/db,target=/data1	busybox	sh

       $ podman	run --mount type=bind,src=volume-name,target=/data1 busybox sh

       When  using  SELinux,  be  aware	that the host has no knowledge of con-
       tainer SELinux policy. Therefore, in the	above example, if SELinux pol-
       icy is enforced,	the /var/db directory is  not  writable	 to  the  con-
       tainer.	A  "Permission	Denied"	message	occurs,	and an avc: message is
       added to	the host's syslog.

       To work around this, at time of writing this man	 page,	the  following
       command needs to	be run in order	for the	proper SELinux policy type la-
       bel to be attached to the host directory:

       $ chcon -Rt svirt_sandbox_file_t	/var/db

       Now,  writing  to the /data1 volume in the container is allowed and the
       changes are reflected on	the host in /var/db.

   Using alternative security labeling
       Override	the default labeling scheme for	each container	by  specifying
       the  --security-opt flag. For example, specify the MCS/MLS level, a re-
       quirement for MLS systems. Specifying the level in the  following  com-
       mand allows the same content to be shared between containers.

       podman run --security-opt label=level:s0:c100,c200 -i -t	fedora bash

       An MLS example might be:

       $ podman	run --security-opt label=level:TopSecret -i -t rhel7 bash

       To disable the security labeling	for this container versus running with
       the

   --permissive	flag, use the following	command:
       $ podman	run --security-opt label=disable -i -t fedora bash

       Tighten	the  security  policy  on  the processes within	a container by
       specifying an alternate type for	the container. For example, run	a con-
       tainer that is only allowed to listen on	Apache ports by	executing  the
       following command:

       $ podman	run --security-opt label=type:svirt_apache_t -i	-t centos bash

       Note  that  an  SELinux	policy	defining a svirt_apache_t type must be
       written.

       To mask additional specific paths in the	container, specify  the	 paths
       separated  by  a	 colon	using  the mask	option with the	--security-opt
       flag.

       $ podman	run --security-opt mask=/foo/bar:/second/path fedora bash

       To unmask all the paths that are	masked by default, set the unmask  op-
       tion  to	 ALL.  Or  to only unmask specific paths, specify the paths as
       shown above with	the mask option.

       $ podman	run --security-opt unmask=ALL fedora bash

       To unmask all the paths that start with /proc, set the unmask option to
       /proc/*.

       $ podman	run --security-opt unmask=/proc/* fedora bash

       $ podman	run --security-opt unmask=/foo/bar:/sys/firmware fedora	bash

   Setting device weight via --blkio-weight-device flag.
       $ podman	run -it	--blkio-weight-device "/dev/sda:200" ubuntu

   Using a podman container with input from a pipe
       $ echo "asdf" | podman run --rm -i --entrypoint /bin/cat	someimage
       asdf

   Setting automatic user namespace separated containers
       # podman	run --userns=auto:size=65536 ubi8-micro	cat /proc/self/uid_map
       0 2147483647	 65536
       # podman	run --userns=auto:size=65536 ubi8-micro	cat /proc/self/uid_map
       0 2147549183	 65536

   Setting Namespaced Kernel Parameters	(Sysctls)
       The --sysctl sets namespaced kernel parameters (sysctls)	 in  the  con-
       tainer. For example, to turn on IP forwarding in	the containers network
       namespace, run this command:

       $ podman	run --sysctl net.ipv4.ip_forward=1 someimage

       Note  that  not	all  sysctls  are  namespaced. Podman does not support
       changing	sysctls	inside of a container that also	modify the  host  sys-
       tem.  As	 the kernel evolves we expect to see more sysctls become name-
       spaced.

       See the definition of the --sysctl option above for the current list of
       supported sysctls.

   Set UID/GID mapping in a new	user namespace
       Running a container in a	new user namespace requires a mapping  of  the
       UIDs and	GIDs from the host.

       $ podman	run --uidmap 0:30000:7000 --gidmap 0:30000:7000	fedora echo hello

   Configuring Storage Options from the	command	line
       Podman  allows  for the configuration of	storage	by changing the	values
       in the /etc/container/storage.conf or by	 using	global	options.  This
       shows  how to set up and	use fuse-overlayfs for a one-time run of busy-
       box using global	options.

       podman --log-level=debug	--storage-driver overlay --storage-opt "overlay.mount_program=/usr/bin/fuse-overlayfs" run busybox /bin/sh

   Configure timezone in a container
       $ podman	run --tz=local alpine date
       $ podman	run --tz=Asia/Shanghai alpine date
       $ podman	run --tz=US/Eastern alpine date

   Adding dependency containers
       The first container, container1,	is not started initially, but must  be
       running	before	container2  starts.  The podman	run command starts the
       container automatically before starting container2.

       $ podman	create --name container1 -t -i fedora bash
       $ podman	run --name container2 --requires container1 -t -i fedora bash

       Multiple	containers can be required.

       $ podman	create --name container1 -t -i fedora bash
       $ podman	create --name container2 -t -i fedora bash
       $ podman	run --name container3 --requires container1,container2 -t -i fedora bash

   Configure keep supplemental groups for access to volume
       $ podman	run -v /var/lib/design:/var/lib/design --group-add keep-groups ubi8

   Configure execution domain for containers using personality flag
       $ podman	run --name container1 --personality=LINUX32 fedora bash

   Run a container with	external rootfs	mounted	as an overlay
       $ podman	run --name container1 --rootfs /path/to/rootfs:O bash

   Handling Timezones in java applications in a	container.
       In order	to use a timezone other	than UTC when running a	Java  applica-
       tion within a container,	the TZ environment variable must be set	within
       the  container.	Java  applications ignores the value set with the --tz
       option.

       # Example run
       podman run -ti --rm  -e TZ=EST mytzimage
       lrwxrwxrwx. 1 root root 29 Nov  3 08:51 /etc/localtime -> ../usr/share/zoneinfo/Etc/UTC
       Now with	default	timezone:
       Fri Nov 19 18:10:55 EST 2021
       Java default sees the following timezone:
       2021-11-19T18:10:55.651130-05:00
       Forcing UTC:
       Fri Nov 19 23:10:55 UTC 2021

   Run a container connected to	two networks (called net1  and	net2)  with  a
       static ip
       $ podman	run --network net1:ip=10.89.1.5	--network net2:ip=10.89.10.10 alpine ip	addr

   Rootless Containers
       Podman  runs  as	a non-root user	on most	systems. This feature requires
       that a new enough version of shadow-utils  be  installed.  The  shadow-
       utils  package  must include the	newuidmap(1) and newgidmap(1) executa-
       bles.

       In order	for users to run rootless, there must be an  entry  for	 their
       username	 in /etc/subuid	and /etc/subgid	which lists the	UIDs for their
       user namespace.

       Rootless	Podman works better  if	 the  fuse-overlayfs  and  slirp4netns
       packages	 are  installed.   The fuse-overlayfs package provides a user-
       space overlay storage driver, otherwise users need to use the vfs stor-
       age driver, which can be	disk space expensive and less performant  than
       other drivers.

       To enable VPN on	the container, slirp4netns or pasta needs to be	speci-
       fied; without either, containers	need to	be run with the	--network=host
       flag.

ENVIRONMENT
       Environment  variables within containers	can be set using multiple dif-
       ferent options, in the following	order  of  precedence  (later  entries
       override	earlier	entries):

        Container image: Any environment variables specified in the container
	 image.

        --http-proxy: By default, several environment variables are passed in
	 from  the host, such as http_proxy and	no_proxy. See --http-proxy for
	 details.

        --env-host: Host environment  of  the	process	 executing  Podman  is
	 added.

        --env-file:  Any  environment	variables  specified via env-files. If
	 multiple files	are specified, then they override each other in	 order
	 of entry.

        --env:	 Any  environment  variables specified overrides previous set-
	 tings.

       Run containers and set the environment ending with a *.	The trailing *
       glob functionality is only active when no value is specified:

       $ export	ENV1=a
       $ podman	run --env 'ENV*' alpine	env | grep ENV
       ENV1=a
       $ podman	run --env 'ENV*=b' alpine env |	grep ENV
       ENV*=b

CONMON
       When Podman starts a container it actually executes the conmon program,
       which then executes the OCI Runtime.  Conmon is the container  monitor.
       It  is a	small program whose job	is to watch the	primary	process	of the
       container, and if the container dies, save  the	exit  code.   It  also
       holds  open  the	 tty  of  the container, so that it can	be attached to
       later. This is what allows  Podman  to  run  in	detached  mode	(back-
       grounded),  so  Podman can exit but conmon continues to run.  Each con-
       tainer has their	own instance of	conmon.	Conmon waits for the container
       to exit,	gathers	and saves the exit code, and then  launches  a	Podman
       process to complete the container cleanup, by shutting down the network
       and storage.   For more information about conmon, see the conmon(8) man
       page.

FILES
       /etc/subuid

       /etc/subgid

       NOTE: Use the environment variable TMPDIR to change the temporary stor-
       age  location  of  downloaded  container	images.	Podman defaults	to use
       /var/tmp.

SEE ALSO
       podman(1), podman-save(1), podman-ps(1),	podman-attach(1),  podman-pod-
       create(1),  podman-port(1),  podman-start(1),  podman-kill(1),  podman-
       stop(1),	 podman-generate-systemd(1),  podman-rm(1),  subgid(5),	  sub-
       uid(5),	    containers.conf(5),	    systemd.unit(5),	 setsebool(8),
       slirp4netns(1), pasta(1), fuse-overlayfs(1), proc(5),  conmon(8),  per-
       sonality(2)

   Troubleshooting
       See podman-troubleshooting(7) for solutions to common issues.

       See podman-rootless(7) for rootless issues.

HISTORY
       September    2018,    updated	by    Kunal   Kushwaha	 <kushwaha_ku-
       nal_v7@lab.ntt.co.jp>

       October 2017, converted from Docker  documentation  to  Podman  by  Dan
       Walsh for Podman	<dwalsh@redhat.com>

       November	2015, updated by Sally O'Malley	<somalley@redhat.com>

       June 2014, updated by Sven Dowideit <SvenDowideit@home.org.au>

       April  2014,  Originally	 compiled by William Henry <whenry@redhat.com>
       based on	docker.com source material and internal	work.

FOOTNOTES
       1: The Podman project is	committed to inclusivity, a core value of open
       source. The master and slave mount propagation terminology used here is
       problematic and divisive, and needs to be changed. However, these terms
       are currently used within the Linux kernel and must be  used  as-is  at
       this  time. When	the kernel maintainers rectify this usage, Podman will
       follow suit immediately.

								 podman-run(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=podman-run&manpath=FreeBSD+14.3-RELEASE+and+Ports>

home | help