Amazon ECS에서 Docker API 오류(500): devmapper 문제 해결
Amazon ECS에서 Docker API 오류(500): devmapper 문제 해결
다음 Docker 오류는 컨테이너 인스턴스의 씬 풀(thin pool) 스토리지가 가득 차서 Docker 데몬이 새 컨테이너를 만들 수 없다는 것을 나타내요.
출처: 문서
본문
다음 Docker 오류는 컨테이너 인스턴스의 씬 풀 스토리지가 가득 차서 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
기본적으로 Amazon ECS-optimized Amazon Linux AMI(버전 2015.09.d 이상)는 /dev/xvda 에 연결되어 파일 시스템의 루트로 마운트되는 운영 체제용 8-GiB 볼륨으로 시작돼요. Docker가 이미지 및 메타데이터 스토리지에 사용하는 /dev/xvdcz 에 연결된 추가 22-GiB 볼륨이 있어요. 이 스토리지 공간이 가득 차면 Docker 데몬은 새 컨테이너를 만들 수 없어요.
컨테이너 인스턴스에 스토리지를 추가하는 가장 쉬운 방법은 기존 인스턴스를 종료하고 더 큰 데이터 스토리지 볼륨으로 새 인스턴스를 시작하는 것이에요. 그러나 이렇게 할 수 없다면 Amazon ECS-optimized Linux AMIs 의 절차를 따라 Docker가 사용하는 볼륨 그룹에 스토리지를 추가하고 논리 볼륨을 확장할 수 있어요.
컨테이너 인스턴스 스토리지가 너무 빨리 차오르는 경우 이 영향을 줄이기 위해 몇 가지 조치를 취할 수 있어요.
- 씬 풀 정보를 보려면 컨테이너 인스턴스에서 다음 명령을 실행해 주세요.
docker info - (Amazon ECS 컨테이너 에이전트 1.8.0 이상) 중지되거나 종료된 컨테이너가 컨테이너 인스턴스에 남아 있는 시간을 줄일 수 있어요.
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION에이전트 구성 변수는 태스크가 중지된 시점부터 Docker 컨테이너가 제거될 때까지 기다리는 시간(기본값 3시간)을 설정해요. 이 변수는 Docker 컨테이너 데이터를 제거해요. 이 값이 너무 낮게 설정되면 중지된 컨테이너를 검사하거나 제거되기 전에 로그를 보지 못할 수 있어요. 자세한 내용은 Amazon ECS container agent configuration 을 참고해 주세요. - 컨테이너 인스턴스에서 실행되지 않는 컨테이너와 사용하지 않는 이미지를 제거할 수 있어요. 다음 예제 명령으로 중지된 컨테이너와 사용하지 않는 이미지를 수동으로 제거할 수 있어요. 삭제된 컨테이너는 나중에 검사할 수 없고, 삭제된 이미지는 새 컨테이너를 시작하기 전에 다시 가져와야 해요.
- 실행되지 않는 컨테이너를 제거하려면 컨테이너 인스턴스에서 다음 명령을 실행해 주세요.
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/"