Amazon ECS의 Docker API error (500):
devmapper
문제 해결
다음 Docker 오류는 컨테이너 인스턴스의 씬(thin) 풀 스토리지가 꽉 찼으며 Docker 대몬이 새 컨테이너를 만들 수 없음을 나타냅니다.
CannotCreateContainerError: API error (500): devmapper: Thin Pool has
4350
free data blocks which is less than minimum required 4454 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior
기본적으로 버전 2015.09.d
이상의 Amazon ECS 최적화 Amazon Linux AMI는 /dev/xvda
에서 연결되고 파일 시스템의 루트로 마운트되는 운영 체제를 위한 8GiB 볼륨으로 시작됩니다. 여기에 Docker가 이미지 및 메타데이터 저장에 사용하는 /dev/xvdcz
에서 연결된 22GiB의 볼륨이 추가됩니다. 이 스토리지 공간이 가득 찬 경우 Docker 대몬은 새 컨테이너를 생성할 수 없습니다.
컨테이너 인스턴스에 스토리지를 추가하는 가장 쉬운 방법은 기존 인스턴스를 종료하고 데이터 스토리지 볼륨이 더 큰 새 인스턴스를 시작하는 것입니다. 하지만 이것이 불가능한 경우, Amazon ECS 최적화 Linux AMI의 절차에 따라 Docker가 사용하는 볼륨 그룹에 스토리지를 추가하여 논리 볼륨을 확장할 수 있습니다.
컨테이너 인스턴스 스토리지가 너무 빨리 채워지는 경우, 몇 가지 조치로 이를 완화할 수 있습니다.
-
씬 폴링 정보를 보려면 컨테이너 인스턴스에서 다음 명령을 실행합니다.
docker info
-
(Amazon ECS 컨테이너 에이전트 1.8.0 이상) 중지되거나 종료된 컨테이너가 컨테이너 인스턴스에 남아 있는 시간을 줄일 수 있습니다.
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
에이전트 구성 변수는 작업이 중지된 때부터 Docker 컨테이너가 제거될 때까지 기다리는 시간을 설정합니다(기본값: 3시간). 이때 Docker 컨테이너 데이터가 제거되므로 이 값을 너무 낮게 설정할 경우 데이터가 제거되기 전에 중지된 컨테이너를 검사하거나 로그를 볼 수 없을 수 있습니다. 자세한 내용은 Amazon ECS 컨테이너 에이전트 구성 단원을 참조하십시오. -
컨테이너 인스턴스에서 실행되고 있지 않은 컨테이너와 사용되지 않는 이미지를 제거할 수 있습니다. 다음 예제 명령을 사용하여 중지된 컨테이너와 사용하지 않은 이미지를 수동으로 제거할 수 있습니다. 삭제된 컨테이너는 나중에 검사할 수 없으며, 삭제된 이미지는 이미지에서 새 컨테이너를 시작하기 전에 다시 가져와야 합니다.
실행되고 있지 않은 컨테이너를 제거하려면 컨테이너 인스턴스에서 다음 명령을 실행합니다.
docker rm $(docker ps -aq)
사용하지 않은 이미지를 제거하려면 컨테이너 인스턴스에서 다음 명령을 실행합니다.
docker rmi $(docker images -q)
-
컨테이너 내에서 사용하지 않은 데이터 블록을 제거할 수 있습니다. 다음 명령을 사용하여 실행 중인 컨테이너에서 fstrim을 실행하고 컨테이너 파일 시스템에서 사용하지 않은 데이터 블록을 삭제할 수 있습니다.
sudo sh -c "docker ps -q | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/"