티스토리 뷰
docker 를 통해 실행하려고 하는데, "no space left on device" 라는 오류가 발생했다.
말 그대로 용량이 부족하다는 말이다. 이를 해결하기위해서는 용량이 얼마나 남았는지 확인하고 불필요한 파일을 제거해야한다.
$ docker run --entrypoint /keytab/c3s_init.sh --rm\
> -v /local/keytab:/keytab\
> -e HADOOP_USER_NAME=admin\
> xxx.yyy.zzz/myImage:latest\
> hadoop fs -ls hdfs://myhost/data/tmp/2022-01-01
Unable to find image 'xxx.yyy.zzz/myImage:latest' locally
latest: Pulling from c3/c3s-env
f34b00c7da20: Pull complete
3ad0f864cde6: Pull complete
b5ed754d4c09: Pull complete
acc862ec4341: Pull complete
cbe38bbfeca5: Pull complete
d8d3897af613: Pull complete
bfe8d58434f5: Pull complete
1b5c87105f9a: Pull complete
4991d9d0db03: Extracting [==================================================>] 2.949GB/2.949GB
16b940526b99: Download complete
1f141b4e9b55: Download complete
df3130e7d29b: Download complete
707670620a07: Download complete
58024db9dc5a: Download complete
a25d7112d90c: Download complete
8fee9e65cc66: Download complete
f571cf5334c4: Download complete
docker: failed to register layer: Error processing tar file(exit status 1): write /usr/hdp/3.1.0.0-78/hadoop-yarn/lib/service-dep.tar.gz: no space left on device.
See 'docker run --help'.
원인확인
원인은 위에 디스크 용량이 부족하기 때문이다. 리눅스에서 디스트 용량을 확인해 보려면 df 명령을 통해서 확인이 가능한데, 여유공간이 4.3G 밖에 없고 이를 확보해야한다. 클라우드 서버를 사용한다면 디스크 용량 확보를 요청하면 쉽게 증설이 되겠지만 그게 아니라면 불필요한 파일을 지워야 한다.
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.9G 0 3.9G 0% /dev
/dev/vda2 50G 46G 4.3G 92% / <--- 여유공간 4.3G
빠른 해결은 용량확보
클라우드 서버 사용자라면 현질을 해서 디스크를 더 확보하는 방법을 찾도록 하자. (물론 물리서버 사용자도 디스크 확보 되면 좋다)
하지만, 모든건 돈이고 바로 해결하려면 결국은 안쓰는 파일을 찾아서 삭제하는게 현실적이다.
1. 안쓰는 도커이미지 삭제하기
파일삭제할게 docker 를 쓰면 로컬에 이미지가 보관되는데, 오래 운영하다보면 안쓰는 이미지들도 생길텐데 이걸 삭제해보자.
(어짜피 다시 이미지는 받으면 되니 일단 돌리는게 급하면 모두 삭제해도 문제는 없다)
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xx.yy.zz/image1 latest c90c253d0dff 11 days ago 4.25GB
xx.yy.zz/image2 latest a30b655d0dee 11 days ago 3.24GB
xx.yy.zz/image3 latest b90a123d0dcb 255 days ago 1.21GB
# image3 번을 최근 안쓴다면? 아래와 같이 삭제 가능하다.
$ docker rmi -f b90a123d0dcb
2. 용량높고 안쓰는 파일 찾기
보통은 logs 파일이나 dump 혹은 download 받고 안지운 tar.gz 파일이 삭제 대상이 된다.
du 명령으로 특정폴더의 용량을 조회할수 있는데 기준점을 정하고 찾도록 하자.
예를 들어 /home1 하위 경로를 확인해본다면 아래와 같은 결과를 확인할수 있다.
$ sudo du -sh /home1/* | sort -hr
10.4G /home1/airflow
1.4G /home1/admin
0.4G /home1/guest
16K /home1/www
여기서 용량이 큰 폴더를 찾으면 다시 또 검토 (=airflow 계정용량이 좀 크니 체크) 하는걸 반복하면 삭제할만한 파일을 찾을수 있다.
나같은 경우는 실제로 airflow 의 로그가 생각보다 많이 쌓인걸 찾아서 이걸 지웠다.
$ du -sh /home1/airflow/* | sort -hr
4.7G /home1/airflow/logs
484M /home1/airflow/py3
...
'docker & k8s' 카테고리의 다른 글
[Docker] RUN, ENTRYPOINT, CMD 차이 이해하기 (0) | 2022.09.21 |
---|---|
[Centos] Docker + private docker-Registry 설치방법 (0) | 2022.09.14 |