Podman에서 컨테이너가 실행되지 않을때 조치방법

시작하는 말
podman에서 컨테이너 띄울때 아래 메시지가 나오면서 정상적으로 실행되지 않는 경우가 있어요.
실행절차
- podman에서 컨테이너 띄울때 에러메시지 발생
$> podman run -d --name=test ... Error: runc: container_linux_go:370: staring container process caised: error adding seccomp filter rule for syscall bdflush: permission denied - 컨테이너 상태를 보면 아래와 같이 state가 구동(Up)이 아니라 생성(created)만 되게 되어요
$> docker ps -a Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd3896eb439d localhost:5000 5 months ago Created 0.0.0.0:80->80/tcp test - container runtime은 runc와 crun을 사용할 수 있는데요. 기본적으로 사용할 수 있는 runtime이 무엇인지는 docker(podman) info로 확인 할 수 있습니다.
runtime 확인 방법
- PODMAN 기반인 경우
$> podman info ... ociRuntime: name: runc package: runc-1.1.12-1.module+el8.10.0825+623b0c20.x86_64 path: /usr/bin/runc ... - DOCKER기반인 경우
$> docker info ... ociRuntime: name: crun package: crun-1.8.7-1.el9.x86_64 path: /usr/bin/crun ... - runtime의 차이점
| 항목 | runc | crun | 권장 사항 |
|---|---|---|---|
| 성능 | 표준적이고 안정적인 성능. | 더 빠르고 메모리 사용량이 적음. 공식 문서와 프로젝트 README 모두 이를 강조함. | 고밀도 워크로드, 빠른 컨테이너 기동이 중요한 환경은 crun. |
| 안정성 | 오래 쓰인 범용 OCI runtime으로 호환성 측면에서 강점이 있음. | OCI 호환이며 기능이 풍부하지만, 환경에 따라 runc보다 덜 익숙할 수 있음. | 문제 재현/호환성 우선이면 runc, 성능/메모리 효율 우선이면 crun. |
| 기능 | SELinux, cgroups, seccomp 등 Linux 보안 기능을 폭넓게 지원함. | 최소 프로세스 수 설정, rootless 그룹 파일 공유, OCI hook stdout/stderr 제어 등 추가 기능이 있음. | rootless/고급 기능은 crun 쪽이 유리. |
| 권장 배치 | 일반적인 범용 환경, 검증된 기본값이 필요한 경우. | RHEL 계열과 Podman/CRI-O 환경에서 권장되는 선택. | RHEL 8/9, Podman, CRI-O는 crun 우선 검토. |
| 호환성 | OCI runtime spec 구현, 넓은 호환성. | OCI runtime spec 구현, runc와 상호 교체 가능. | 둘 다 OCI 호환이므로 교체는 가능하지만 운영 검증은 필요. |
- crun은 runc에 비해 최대 2배 빠르고, 메모리 사용량은 최대 50배 적습니다
- crun은 최소 프로세스 수 설정, rootless 컨테이너의 그룹별 파일 공유, OCI 후크의 stdout/stderr 제어 등 추가 기능을 제공합니다
조치방안
- 한꺼번에 다 할 필요는 없고 1번해보고 해결이 안되면 2번, 2번도 안되면 3번순으로 진행)
- podman 패키지 업데이트
$> yum update podman -y ... - podman 실행 옵션에서 security설정 변경
$> podman run -d --security-opt=seccomp=unconfined --name=test ... - runtime 종류 변경
$> podman run --runtime crun -d --name=test ...
확인방법
$> docker ps -a
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd3896eb439d localhost:5000 5 months ago Up 2 weeks ago 0.0.0.0:80->80/tcp test
Reference
- https://.com/ko/documentation/red_hat_enterprise_linux/9/html/building_running_and_managing_containers/selecting-a-container-runtime_building-running-and-managing-containers#selecting-a-container-runtime_building-running-and-managing-containers
- https://.com/ko/documentation/red_hat_enterprise_linux/8/html/building_running_and_managing_containers/proc_running-containers-with-runc-and-crun_selecting-a-container-runtime