Files
podman/docs/source/markdown/podman-exec.1.md.in
ryanmccann1024 61cbc0c3ee feat(exec): Add --no-session flag for improved performance
Fixes: #26588

For use cases like HPC, where `podman exec` is called in rapid succession, the standard exec process can become a bottleneck due to container locking and database I/O for session tracking.

This commit introduces a new `--no-session` flag to `podman exec`. When used, this flag invokes a new, lightweight backend implementation that:

- Skips container locking, reducing lock contention
- Bypasses the creation, tracking, and removal of exec sessions in the database
- Executes the command directly and retrieves the exit code without persisting session state
- Maintains consistency with regular exec for container lookup, TTY handling, and environment setup
- Shares implementation with health check execution to avoid code duplication

The implementation addresses all performance bottlenecks while preserving compatibility with existing exec functionality including --latest flag support and proper exit code handling.

Changes include:
- Add --no-session flag to cmd/podman/containers/exec.go
- Implement lightweight execution path in libpod/container_exec.go
- Ensure consistent container validation and environment setup
- Add comprehensive exit code testing including signal handling (exit 137)
- Optimize configuration to skip unnecessary exit command setup

Signed-off-by: Ryan McCann <ryan_mccann@student.uml.edu>
Signed-off-by: ryanmccann1024 <ryan_mccann@student.uml.edu>
2025-11-19 12:44:48 -05:00

103 lines
2.5 KiB
Markdown

% podman-exec 1
## NAME
podman\-exec - Execute a command in a running container
## SYNOPSIS
**podman exec** [*options*] *container* *command* [*arg* ...]
**podman container exec** [*options*] *container* *command* [*arg* ...]
## DESCRIPTION
**podman exec** executes a command in a running container.
## OPTIONS
#### **--cidfile**=*file*
Read the ID of the target container from the specified *file*.
#### **--detach**, **-d**
Start the exec session, but do not attach to it. The command runs in the background, and the exec session is automatically removed when it completes. The **podman exec** command prints the ID of the exec session and exits immediately after it starts.
@@option detach-keys
@@option env
@@option env-file
@@option interactive
@@option latest
@@option no-session
@@option preserve-fd
@@option preserve-fds
@@option privileged
@@option tty
@@option user
@@option workdir
## Exit Status
The exit code from `podman exec` gives information about why the command within the container failed to run or why it exited. When `podman exec` exits with a
non-zero code, the exit codes follow the `chroot` standard, see below:
**125** The error is with Podman itself
$ podman exec --foo ctrID /bin/sh; echo $?
Error: unknown flag: --foo
125
**126** The _contained command_ cannot be invoked
$ podman exec ctrID /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 exec ctrID 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** The _contained command_ exit code
$ podman exec ctrID /bin/sh -c 'exit 3'; echo $?
3
## EXAMPLES
Execute command in selected container with a stdin and a tty allocated:
```
$ podman exec -it ctrID ls
```
Execute command with the overridden working directory in selected container with a stdin and a tty allocated:
```
$ podman exec -it -w /tmp myCtr pwd
```
Execute command as the specified user in selected container:
```
$ podman exec --user root ctrID ls
```
Execute command but do not attach to the exec session leaving the command running in the background:
```
$ podman exec -d ctrID find /path/to/search -name yourfile
```
## SEE ALSO
**[podman(1)](podman.1.md)**, **[podman-run(1)](podman-run.1.md)**
## HISTORY
December 2017, Originally compiled by Brent Baude<bbaude@redhat.com>