콘텐츠로 건너뛰기

Podman 컨테이너 자동 시작 (rootless) (systemd) (간편)

  • 기준

이 글은 추후 참고하기 위해 작성됨.

OS: Rocky Linux 9.5
Container: Podman
시점: 2025.01.06

Podman은 Docker와 달리 컨테이너 자동 시작이 안 된다.
자동 시작을 사용하려면 Quadlet(권장), podman generate systemd(지원 중단), docker-compose.yml에 대한 systemd 유닛 파일 작성 등이 있다.

Quadlet을 사용하는 게 바람직하지만, docker-compose.yml을 systemd에 등록하는 방법도 있다. 이 방법이 가장 쉽다.

rootless 기준

# 사용자 폴더에 유닛 파일 생성
touch /home/user_name/.config/systemd/user

# 유닛 파일 편집
nano /home/user_name/.config/systemd/user/nginx-proxy-manager.service
nginx-proxy-manager.service 유닛 내용 (user_name을 실제 사용자 이름으로 교체하기)
______________________________
[Unit]
Description=Podman-compose Nginx Proxy Manager
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
# podman-compose 커맨드가 끝난 후에도 "Active" 상태로 유지하기 위해 필요
RemainAfterExit=yes

# docker-compose.yml이 있는 디렉터리로 이동
WorkingDirectory=/home/user_name

# 컨테이너 기동
ExecStart=/usr/bin/podman-compose -f /home/user_name/docker-compose.yml up -d

# 컨테이너 정지
ExecStop=/usr/bin/podman-compose -f /home/user_name/docker-compose.yml stop

# systemctl reload 또는 restart 시, 아래 순서로 작동 (stop 후 다시 up)
ExecReload=/usr/bin/podman-compose -f /home/user_name/docker-compose.yml stop && \
           /usr/bin/podman-compose -f /home/user_name/docker-compose.yml up -d

# Restart= 옵션을 주어도 Type=oneshot에선 크게 의미가 없다
# 실제로는 systemctl restart 시 ExecStop + ExecStart 순서로 재실행된다.

[Install]
# multi-user.target 대신 user 단위라면 default.target 사용
WantedBy=default.target
______________________________
추가 설명
Type=oneshot + RemainAfterExit=yes로 함으로써, 컨테이너가 백그라운드에서 계속 동작해도 systemd 상에서 “Active” 상태로 인식된다.
# systemd에 등록 및 활성화

# 1) 유닛 파일 새로 인식
systemctl --user daemon-reload

# 2) 부팅 시 자동 실행 (enable)
systemctl --user enable nginx-proxy-manager

# 3) 지금 바로 시작 (start)
systemctl --user start nginx-proxy-manager
# 제대로 뜨는지 확인
systemctl --user status nginx-proxy-manager
podman ps
# 명령 시나리오

# 시작
systemctl --user start nginx-proxy-manager

# 중지
systemctl --user stop nginx-proxy-manager

# 재시작
systemctl --user restart nginx-proxy-manager

# 리로드
systemctl --user reload nginx-proxy-manager
# 정리

이 방식대로 설정하면:
시스템 부팅 시 nginx-proxy-manager.service가 자동으로 실행되어
podman-compose -f /home/user_name/docker-compose.yml up -d 명령어가 수행된다.

systemctl --user stop nginx-proxy-manager 시 컨테이너를 podman-compose stop으로 중지한다.

systemctl --user restart nginx-proxy-manager 시 중지 후 재기동(stop → up -d).

WantedBy=default.target로 지정했으므로, user session(rootless) 기준 부팅 자동 실행이 이뤄집니다. 만약 system-wide로 관리하고 싶다면 /etc/systemd/system/에 유닛을 두고 multi-user.target을 사용하면 된다.

이로써 c97ff515fcb 사용자의 docker-compose.yml 기반 컨테이너들을 systemd와 연동하여, 부팅 자동 실행 및 manual start/stop/restart를 간편하게 제어할 수 있게 된다.

Join the conversation

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다