[podman] 실행중인 컨테이너가 임의 종료되는 문제 해결

docker 환경에서 podman 환경으로 마이그레이션 후 운영 과정에서 발생한 에러 및 트러블 슈팅을 다룬다.

마이그레이션 과정을 다룬 포스트는 아래에서 확인 가능하다.

[podman] docker에서 podman으로 마이그레이션하기

 

문제

mariadb 컨테이너를 podman으로 구동하던 중 다음 에러와 함께 임의로 종료(shutdown)되는 현상 발생

컨테이너 로그: mariadbd (initiated by: unknown): Normal shutdown

컨테이너 목록에서 종료된 컨테이너 확인
컨테이너 로그에서 종료 로그 확인

컨테이너가 종료된 이유도 없고 'initiated by: unknown' 로그라서 종료한 주체도 식별이 되지 않는다.

docker-compose.yml 파일로 구성한 이미지이며, restart: always 옵션을 부여해도 동일한 현상이 계속 발생

그러던 중 docker-compose logs 로 확인했을 때, 다음의 에러 로그 확인

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 200, in perform_command
    project = project_from_options('.', options)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 60, in project_from_options
    return get_project(
           ^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 152, in get_project
    client = get_client(
             ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 41, in get_client
    client = docker_client(
             ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 170, in docker_client
    client = APIClient(use_ssh_client=not use_paramiko_ssh, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 197, in __init__
    self._version = self._retrieve_server_version()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 221, in _retrieve_server_version
    raise DockerException(
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied'))

 

해결

환경변수 DOCKER_HOST에 podman 소켓의 주소를 등록한다.

sudo systemctl enable --now podman.socket

export DOCKER_HOST=unix:///run/podman/podman.sock

 

이와 같이 설정한 다음 컨테이너를 다시 생성하고 시작하면 된다.

 

이유

docker에서 podman으로 마이그레이션 하기 위해서 DOCKER_HOST 환경변수를 이용하는 방법이라고 한다.
데몬 기반으로 동작하는 도커와 데몬없이 동작하는 podman의 동작구성 차이에서 발생하는 이슈로 정리한다.

출처:https://podman-desktop.io/docs/migrating-from-docker/using-the-docker_host-environment-variable

 

podman이 운영의 편리가 아닌 트러블슈팅만 늘어난 기분

 

 

반응형