podman exec:进入运行中的容器
podman exec 用法全解:一次性命令、交互 shell、换用户/工作目录/环境变量、后台执行,rootless 环境与 pod 内执行的特殊性。与 docker exec 的差异点一篇讲清。
直接回答:podman exec 与 docker exec 用法一致——podman exec -it <容器> sh 进交互 shell,一次性命令直接拼接;特有差异在 rootless 环境(容器进程属普通用户,exec 继承该权限模型)与用户命名空间映射;exec 目标是具体容器,不提供 --pod 选项。
基本用法
podman exec web ls /app # 一次性命令
podman exec -it web /bin/sh # 交互 shell
podman exec -u nginx -w /etc/nginx web nginx -t # 指定用户与工作目录
podman exec -e DEBUG=1 web ./diag.sh # 注入环境变量
podman exec -d web touch /tmp/flag # 后台执行
rootless 环境的特殊性
rootless 容器里"root"只是用户命名空间映射——exec 进去看到的权限边界以宿主机普通用户为底。排障挂载卷权限问题时,先看宿主机侧的真实属主。
pod 内执行
podman pod ps
podman exec -it mypod-web sh # 按 pod 内容器名
Podman 原生支持 pod 概念(多容器可共享网络命名空间;共享存储仍需显式挂载)——exec 目标精确到容器名。
常见问题(FAQ)
Q:podman exec 和 docker exec 完全兼容吗?
A:常见参数相似,需核对版本与远程客户端限制;Docker 本身也没有 docker service exec。
Q:distroless 容器进不去?
A:同 Docker——无 shell 镜像可先用 podman logs、podman cp,或受控调试镜像;不要假定存在通用 podman debug 子命令。
Q:rootless 下 exec 改文件权限怎么算?
A:容器 UID 可能映射到调用者或 subordinate UID 范围,不是全部映射为当前用户。结合 podman unshare、用户映射和 SELinux 标签排查,勿盲目 chmod 777。
官方参考
本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。