使用runc解决未知原因导致的停止容器时报错send signal to pidfd: Permission denied
报错如下:
root@racknerd-14a7c8:~# podman stop pmail
2025-10-19T09:53:14.285697Z: send signal to pidfd: Permission denied
Error: timed out waiting for file /run/libpod/exits/b0fc27c2e04e4655bc2a810ce522b37952f27b4706727bbca2f9faa59de150b3: internal libpod error并且使用podman-compose down也会有相同报错,并且重启容器时会遇到残留进程占用25端口的问题。
在经过一系列尝试后DeepSeek已经开始不断推荐我直接使用Docker,但是我不想用。所以尝试使用runc作为最后一搏,还不行我就真的换Docker了,毕竟好用的工具才是好工具。
什么是RunC?
RunC是Docker捐赠给OCI作为OCI容器运行时标准的参考实现,因此我猜想使用runc比podman的默认运行方式更符合OCI标准,因而能更大程度兼容Docker镜像。
安装 runc sudo apt install runc -y
配置 Podman 使用 runc 作为默认运行时
sudo nano /etc/containers/containers.conf
在 containers.conf 中添加:
[engine]
runtime = "runc"为了确保podman-compose一定使用了runc,可以添加runtime: runc
version: '3'
services:
pmail:
image: ghcr.io/jinnrry/pmail:latest
container_name: pmail
restart: always
#privileged: true 特权运行不能解决当前遇到的问题,所以没必要用。
ports:
- "25:25"
- "2080:80"
- "20443:443"
- "110:110"
- "465:465"
- "995:995"
- "993:993"
volumes:
- "/root/podman/pmail/config:/work/config"
runtime: runc这时候再使用podman-compose up -d和down 应该都问题了。
但是你最好确保自己的环境是完全干净的,可以通过:podman system reset --force && reboot 确保这点。
技术文,不明觉历。