Docker 설치에 문제가 있습니다 - 디바이스에 공간이 부족합니다 - ./launcher cleanup을 사용해도 안전할까요?

./launcher rebuild app. 실행 후 Your Docker installation is not working correctly 문제가 발생하고 있습니다.

에러 메시지는 docker: failed to register layer: Error processing tar file(exit status 1): write /usr/lib/x86_64-linux-gnu/libx265.a: no space left on device.입니다.

…이 문제를 해결하는 일반적인 팁 중 하나로 ./launcher cleanup을 사용하는 것을 보았습니다. 다만, 사용 전에 안전성이 있는지 확인하고 싶습니다. 실행 시 다음과 같은 경고가 나오기 때문입니다:
WARNING! This will remove all stopped containers.
WARNING! This will remove all images without at least one container associated to them.

도와주실 수 있을까요? 여기서 중요한 것을 실수로 삭제하지 않도록 확인만 하고 싶습니다.

docker ps -a

docker images

확실히 권장되는 옵션입니다:

다만, 버튼을 누르기 전에 사이트가 정상적으로 실행되고 있는지 확인하려면 먼저 ./launcher start app을 실행할 수 있습니다.

./launcher start app를 실행하면 동일한 오류가 발생합니다:

docker: failed to register layer: Error processing tar file(exit status 1): write /usr/lib/x86_64-linux-gnu/libx265.a: no space left on device.
See 'docker run --help'.
Your Docker installation is not working correctly

…그래서 여전히 궁금한 질문에 대한 답을 알지 못합니다: 사이트가 실행 중이지 않을 때 ./launcher cleanup를 사용하는 것이 안전한가?

첫 번째 게시물의 ‘docker images’ 아래 스크린샷을 보면 오래된 이미지가 많이 있는 것 같지만, 이를 특정하여 삭제하는 방법과 이것이 문제를 일으키는지 여부는 알지 못합니다.

df

Docker 컨테이너가 실행 중이라면 컨테이너가 삭제되지 않습니다. 컨테이너가 실행 중이 아니라면 컨테이너가 삭제되지만, ./launcher rebuild app을(를) 사용하여 새 컨테이너를 다시 빌드할 수 있습니다.

감사합니다. 하지만 여전히 제게는 좀 더 명확하지 않네요. Docker는 제 강점이 아니라서 컨테이너를 삭제하고 다시 빌드하면 제 사이트에 문제가 생기는지 모르겠거든요… 앱이 실행되지 않는 상태에서 먼저 선택적으로 공간을 정리해서 앱을 실행하는 것이 더 안전할까요? 예를 들어 이렇게요:

  1. 특정 이미지를 삭제 대상으로 지정하여 먼저 공간을 확보합니다.
  2. 그런 다음 ./launcher start app을 실행합니다.
  3. 앱이 실행된 후: ./launcher cleanup을 실행합니다.

…이런 신중함이 필요한지 모르겠네요. 아마 그냥 ./launcher cleanup을 바로 실행해도 앱이 실행 중이 아니더라도 중요한 것을 삭제하지 않고 잘 작동할 수도 있겠죠.

하지만 위 접근 방식이 옵션이 될 수 있다고 생각하신다면: 특정 이미지를 삭제 대상으로 지정하는 명령어(위의 1단계)를 아시나요? 아래에 삭제할 수 있는 이미지 옵션들을 첨부했습니다.

제가 하라면, 먼저 백업 파일 하나둘을 삭제하겠습니다. 그러면 시스템이 정상적으로 작동할 충분한 공간이 확보될 것입니다.

./launcher start app을 실행한 상태에서 ./launcher cleanup을 실행하면, 정상적으로 작동하는 이미지는 삭제되지 않으며, 클리업이 진행되는 동안에도 사이트는 계속 작동합니다.

만약 실수로 정상 작동하는 이미지를 삭제했는데, 최근에 업그레이드를 했다면 ./launcher rebuild app을 실행하기만 하면 괜찮은 상태로 복원될 가능성이 높습니다.

백업 하나나 두 개만 삭제하는 명령어를 아시나요? 아마도 ./ launcher cleanup [이미지 ID] 같은 것일까요?

./launcher cleanup 명령이 백업을 삭제하지는 않는다고 생각합니다. 사용하지 않는 컨테이너만 삭제하는 것 같아요.

cd /var/discourse/shared/standalone/backups/default
ls 
rm file-to-delete

다음과 같이 진행했습니다.

cd /var/discourse/shared/standalone/backups/default
ls 
rm oldest-file

./launcher rebuild app을 시도했습니다.

…이전과 동일한 메모리 문제로 실패했습니다.

./launcher cleanup을 실행했습니다.

4GB를 정리했습니다.

다시 ./launcher rebuild app을 시도했습니다.

새로운 오류와 함께 실패했습니다.

./discourse-doctor를 실행하여 원인을 파악하려고 했습니다.

…해결된 것 같습니다?
그런데 왜 그런지 전혀 모르겠네요. 다음에 대비해서 이유를 알고 싶습니다.

재빌드 시 메모리 오류가 발생했다면, 스왑을 1GB 더 추가하는 것이 좋겠지만, 그렇게 하면 디스크 공간 문제가 더 악화될 수 있습니다(25GB RAM의 작은 드롭릿을 사용 중인 것으로 보이며, 이는 겨우 충분한 수준입니다). 각 재빌드 전에 ./launcher cleanup를 실행하거나, 아니면 백업 파일이 많이 쌓여 있어 이를 S3로 이동하는 것이 좋습니다([업로드용 S3 호환 객체 스토리지 제공자 설정](Configure an S3 compatible object storage provider for uploads – 백업만 수행해도 되며, 해당 문서에 설명된 모든 에셋을 처리할 필요는 없습니다).

두 번째 오류는 메모리 오류가 아니었지만, 새로운 오류가 무엇인지 파악할 수 없었습니다: 그래서 닥터(doctor)를 실행했습니다.
어쨌든, ./discourse-doctor로 해결되었는데, 실제로 무슨 일이 있었는지 알 수 있었으면 좋았을 텐데 아쉬웠습니다.
도움 주셔서 감사합니다!

RAM(메모리)과 디스크 공간을 혼동하고 있는 것 같습니다. 메모리 오류는 발생했다가 사라지기도 하며, "error 127"라는 오류 메시지는 난해해서 쉽게 놓치기 쉽습니다.