도커 스냅 제거 후 도커 컨테이너를 복원하는 방법

도커 스냅 제거 후 도커 컨테이너를 복원하는 방법

으로 도커를 제거했습니다 sudo snap remove docker. 나는 실제로 그것을 제거하고 싶지 않았고 단지 내가 설치했는지 확인하고 ( 뒤늦게 snap사용했어야 함 ) 그것이 나에게 같은 메시지 를 표시할 것이라고 믿었습니다. 하지만 계속해서 도커를 제거했습니다. 괜찮은. 다시 설치하는 것도 빨랐습니다.snap list[Y/n]apt

그런데 내 컨테이너는 어디에 있습니까?! 모든 이미지와 컨테이너가 (docker ps -a)사라졌습니다! 제거하는데 시간이 오래 걸려서 혹시 백업이 되어있는지 아니면 파일이 그대로 남아있고 컨테이너를 복원할 수 있는지 궁금합니다. 이미지에는 신경쓰지 말고 컨테이너에만 신경쓰세요. 감사해요.

확인했지만 /var/snap/docker/common/var-lib-docker/containers원래 컨테이너가 없습니다.

답변1

알고 보니 오랜 시간이 걸렸던 작업은 백업, 즉 스냅샷이었다. 로부터선적 서류 비치:

스냅샷은 snap save 명령을 사용하여 수동으로 생성되며 스냅이 제거되면 자동으로 생성됩니다(snapd 2.39+ 필요). 스냅샷을 사용하여 스냅 상태를 백업하고, 스냅을 이전 상태로 되돌리고, 새로운 snapd 설치를 이전에 저장된 상태로 복원할 수 있습니다.

내 버전을 확인했습니다 snapd.

# snap --version
snap    2.52.1
snapd   2.52.1
series  16
ubuntu  21.04
kernel  5.11.0-40-generic

그런 다음 어떤 스냅샷을 사용할 수 있는지 확인했습니다.

# snap saved
Set  Snap    Age    Version  Rev   Size    Notes
1    docker  2h58m  20.10.8  1125  1.39GB  auto

스냅샷이 정상인지 확인했습니다.

# snap check-snapshot 1
Snapshot #1 verified successfully.

마지막으로 자동 스냅샷을 복원했습니다.

# snap restore 1
Restored snapshot #1.

이 시점에서는 docker ps -a복원하려는 컨테이너가 아닌 최신 설치 후 생성한 컨테이너가 계속 표시되었습니다. 아마도 새 컨테이너를 만들지 않았다면 제대로 작동했을 것입니다. 하지만 적어도 컨테이너 파일은 복원되었다는 것을 알고 있습니다 /var/snap/docker/common/var-lib-docker/overlay2/. . 아무것도 없는 것보다는 낫습니다. 조심하세요 snap remove!

원본 컨테이너 복원

내가 어떻게 이 상태에 이르렀는지 요약해 보겠습니다.

  • sudo snap remove docker중요한 컨테이너를 닦아낸 실행
  • sudo snap install docker도커를 다시 설치하기 위해 실행했습니다 .
  • docker-compose up두 개의 새로운 컨테이너를 가져온 실행
  • snap restore 1자동 스냅샷을 복원하기 위해 실행되었습니다 .

이 시점에서 복원된 컨테이너 파일을 찾을 수 있었지만 docker ps -a여전히 실제 컨테이너는 표시되지 않았습니다. 요약하자면, 전체 컨테이너를 다시 가져오기 위해 제가 수행한 작업은 다음과 같습니다.

  • 필요하지 않았기 때문에 두 번째 설치 후에 보이는 모든 컨테이너와 이미지를 제거했습니다.
  • 도커를 다시 제거하고 sudo snap remove docker자동 스냅샷이 다시 발생하는 것을 확인했습니다."자동 스냅샷 세트 #2에 스냅 "docker"의 데이터를 저장합니다.".
  • 첫 번째 스냅샷을 다시 복원했습니다.snap restore 1

이제 그렇게 하면 docker ps -a모든 컨테이너를 중지된 상태로 다시 볼 수 있습니다! 하지만 한 가지 문제가 있습니다. 그 중 하나가 다음 메시지와 함께 시작되지 않습니다 Error: response from daemon: OCI runtime create failed: container with id exists:....

이 문제를 해결하기 위해 제가 찾은 가장 간단한 방법은 docker commit <container-id>결과 이미지를 사용하여 새 컨테이너로 시작하는 것이었습니다. 괜찮은 것을 확인한 후 깨진 것을 제거했습니다. 모두 정상으로 돌아왔습니다!

그런데 볼륨을 사용하여 컨테이너에 데이터를 유지하는 것이 좋은 방법으로 간주됩니다. 이미지도 가능합니다저장됨아카이브로.

관련 정보