write /var/lib/docker/tmp/GetImageBlob3644316352: no space left on device 오류 해결

 

현상

요청사항 수정후 개발서버 브런치에 머지까지 끝냈는데 

해당 화면에 수정된 내용이 반영이 되지 않는 현상이 있었다.

젠킨스에 접속해 로그를 확인해봤다.

동일 스텝에서 성공적으로 돌아갔을때와 실패했을때를 비교해보니 

실패한 경우의 로그에서 no space left on device 라는 로그가 있었고 

확인해보니 디스크 공간 부족이 이유 였다. 

이 메시지는 젠킨스 빌드 도중에 Docker 이미지를 작성하거나 가져오려고 할 때 발생하는 오류라고 한다.

이 오류의 핵심은 "no space left on device"로, 이는 Docker가 실행 중인 서버의 디스크 공간이 부족하여

더 이상 데이터를 저장할 수 없을때 나타나는 이유라고 한다. 

해결방법

1. 디스크 공간 확인:

먼저 서버에서 사용 가능한 디스크 공간을 확인하세요. df -h 명령어를 사용하면 현재 디스크 사용량과 사용 가능한 공간을 볼 수 있습니다.

2. 불필요한 Docker 이미지 및 컨테이너 정리:

Docker 이미지와 컨테이너는 시간이 지남에 따라 상당한 양의 디스크 공간을 차지할 수 있습니다. 불필요한 이미지, 컨테이너, 볼륨, 네트워크를 정리하여 공간을 확보할 수 있습니다. 다음 명령어를 사용할 수 있습니다:
불필요한 컨테이너 정리: docker container prune
사용하지 않는 이미지 정리: docker image prune -a
사용하지 않는 볼륨 정리: docker volume prune
사용하지 않는 네트워크 정리: docker network prune
위의 모든 것을 한 번에 정리: docker system prune -a


3.디스크 확장: 

서버의 디스크 공간이 지속적으로 부족한 경우, 디스크를 확장하는 것을 고려해야 할 수 있습니다. 이는 서버의 구성과 사용 중인 클라우드 서비스 제공업체에 따라 달라질 수 있습니다.
로그 파일과 임시 파일 확인: 디스크 공간을 많이 사용하는 다른 원인으로는 크기가 큰 로그 파일이나 임시 파일이 있을 수 있습니다. 이러한 파일들을 정기적으로 확인하고 필요하지 않은 경우 삭제하여 공간을 확보하세요.
저장 정책 검토: Docker 및 Jenkins와 같은 도구들의 저장 정책을 검토하고 조정하여, 필요 이상으로 많은 데이터가 저장되지 않도록 할 수 있습니다.

 

 

라고 GPT가 알려주고 있다. 

 

aws ec2 환경에서 gitaction이랑 docker을 사용해 

svelteKit 으로 된 프로젝트를 도커로 빌드해서 ecr에 푸시하고 ec2에 npm run dev 로  CI/CD로

띄우는것까지는 작업을 하고

이제 nginx를 붙여볼까 하면서 도커파일좀 건드려 보고 있는데

검색해서 나온 것들은 

엔진스에 스벨트 빌드해서 나온 아티팩트를 서빙하려고

COPY --from=build /app/public /usr/share/nginx/html

이렇게 해뒀는데 

 

COPY failed: stat /app/public: file does not exist
Error: Process completed with exit code 1.

이런 에러가 나온다

도커 빌드 할때 저 위치를 찾을수 없다고 나오는데 한참을 헤매다가 

빌드파일은 .svelte-kit에 있다는걸 알아냈다

그러나

COPY --from=build /app/.svelte-kit /usr/share/nginx/html

으로 수정을 하더라도 도커 빌드는 되지만 nginx에서는 게이트웨이 오류가 난다.

스벨트가 따로 index.html 파일을 생성하지 않기 때문이다.

 

아마 nginx를 사용하려면 컨테이너 2개 띄워서

nginx->svlete로 프록시해주는 구조로 가야 할것 같다.

 

괜히 한큐에 끝내보려고 아둥바둥 시간 많이 썻다.

 

 

 

svelteKit으로 만든 프로젝트를 개발환경 docker compose 에서 올려보려고 하는데

페이지가 작동되지 않는다는 메세지만 나타난다?

포트설정도 제대로 했고 도커에서 정상적으로 올라간것도 확인 했는데

뭐가 문제인지를 몰라 한참을 헤맸다

 

아래는 svelteKit 프로젝트에 만든 도커 파일이다.

 

1. DockerFile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Node.js 18 버전을 사용합니다.
FROM node:18
 
# 앱 디렉터리를 만듭니다.
WORKDIR /app
 
# 앱 소스 코드를 복사합니다.
COPY . .
 
# 앱 종속성 설치를 실행합니다.
RUN npm install
 
# 앱을 빌드합니다.
RUN npm run build
 
 
# 앱 실행을 위한 명령어를 지정합니다.
CMD ["npm""run""start"]
cs

 

 

2. docker-compose.yml 파일

1
2
3
4
5
6
7
8
9
version: "3.9"
services:
  app:
    build: .
    ports:
      - "5173:5173"
    environment:
      NODE_ENV: production
 
cs

 

?? 뭐 문제가 없어 보인다. 그리고 저 문제로 검색을 해봐도

nginx관련된 내용만 잔뜩 나온다 난 nginx 안쓰는데!

그러다 한 문서를 발견했다.

 

https://github.com/sveltejs/kit/discussions/5673

 

dockerize sveltekit · sveltejs/kit · Discussion #5673

I have an issue with running sveltekit app through the docker container. I am able to run an app in docker but when I want to make some changes on frontend UI I can see them only for one second. An...

github.com

 

문제는

CMD npm run dev

이부분이었다.

이걸 

CMD npm run dev -- --host 

이런식으로 써줘야 한단다.

난 dev대신 start 스크립트를 따로 만들었으니 

도커파일을 수정하면

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Node.js 18 버전을 사용합니다.
FROM node:18
 
# 앱 디렉터리를 만듭니다.
WORKDIR /app
 
# 앱 소스 코드를 복사합니다.
COPY . .
 
# 앱 종속성 설치를 실행합니다.
RUN npm install
 
# 앱을 빌드합니다.
RUN npm run build
 
 
# 앱 실행을 위한 명령어를 지정합니다.
CMD ["npm""run""start""--""--host"]
 
 
cs

 

이렇게 수정을 해줘야 하는 것이었다.

한참동안 뭔가 문제인지 몰랐는데 문제점을 찾아서 다행이다.

이 블로그를 찾아오는 다른 사람들도 이와같은 문제였다면 잘 해결했길 바란다.

+ Recent posts