[Infra] 도커(docker)(10) 도커 관련 각종 문제 해결
업데이트:
도커(docker)(10) 도커 관련 각종 문제 해결
참고링크
참고 링크
- (0)도커의 개념
- (1)도커 설치하기, hello world!
- (2)도커 컨테이너 조작 기초(pull, run, ps)
- (3)도커 이미지 변경 후 저장(commit)
- (4)도커 컨테이너 네트워크
- (5)도커 API 이미지 빌드 및 컨테이너 실행
- (6)도커 컴포즈를 활용한 여러 개의 Flask, Nginx 배포
- (7)도커 볼륨을 이용한 데이터 관리
- (8)도커 장고 이미지 살펴보기
- (9)도커 PostgreSQL 컨테이너 배포
- (10)도커 이미지가 지워지지 않을때
- (1)쿠버네티스 구조
- (2)쿠버네티스 설치
- (3)쿠버네티스 서비스 배포하기
- (4)컨테이너 IP와 파드 IP의 관계
- (5)퍼시스턴트 볼륨 스토리지
- (6)쿠버네티스 에러 메시지
사례0) 도커 서비스를 재시작하고 싶을때
0-1. 문제 상황 설명
도커 서비스를 재시작하고 싶어요
0-2. 해결 방법
$ service docker restart
또는
$ systemctl restart docker
사례1) 도커 이미지가 안지워질때
1-1. 문제 상황 설명
간만에 도커 이미지 좀 정리하려고 image 리스트를 출력했습니다. 다음은 제 도커 이미지 리스트 입니다.
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
my-ubuntu-02 0.1 9c36e432fe81 12 days ago 119MB
ubuntu latest cdb68b455a14 2 weeks ago 77.8MB
mytest-django-test latest 35fa5d40cf1c 5 weeks ago 976MB
mytest-nginx-test latest b2631854b239 5 weeks ago 142MB
nginx-test latest 61408ccf33f5 5 weeks ago 142MB
practice-test latest 66f88db0ac1d 5 weeks ago 972MB
my-ubuntu 0.1 38cc32eea570 6 weeks ago 116MB
postgres latest 75993dd36176 8 weeks ago 376MB
mytest-psql-test latest ad451517b273 8 weeks ago 376MB
nginx latest 2d389e545974 8 weeks ago 142MB
ubuntu <none> 2dc39ba059dc 2 months ago 77.8MB
python 3.10.4 e4ccc57bca82 5 months ago 920MB
hello-world latest feb5d9fea6a5 13 months ago 13.3kB
django latest eb40dcf64078 5 years ago 436MB
저는 위 이미지 중 아래에서 네번쨰에 있는 ubuntu 이미지를 지우려고 했습니다. 그랬더니 다음과 같은 에러 메시지가 출력됩니다.
$ docker image rm 2dc39ba059dc
Error response from daemon: conflict: unable to delete 2dc39ba059dc (cannot be forced) - image has dependent child images
위 메시지를 보면 해당 이미지는 dependent child image를 가지고 있으므로 삭제 할 수 없다는 것을 알 수 있습니다.
1-2. 해결 방법
따라서 해당 이미지를 삭제하고 싶다면 먼저 의존성 있는 이미지가 뭔지부터 알아야합니다.
$ docker inspect --format=' ' $(docker images --filter since={이미지ID} -q)
위 커맨드를 이용해 의존성 있는 이미지를 모두 검색합니다. since 옵션은 해당 id로부터 만들어진 이미지를 출력하라는 뜻입니다. 그리고 -q는 –quiet와 같은 옵션으로 이미지ID만 출력하라는 뜻입니다. 그 결과는 다음과 같습니다.
$ docker inspect --format=' ' $(docker images --filter since=2dc39ba059dc -q)
sha256:9c36e432fe81f3188a2e71fd81ffd69f0d952ca1453ee3967616ee2c5b5e3e40 sha256:cdb68b455a141ed921945f6d39a8c0694a7e21a37b2b030488d73e38875a26cc
sha256:cdb68b455a141ed921945f6d39a8c0694a7e21a37b2b030488d73e38875a26cc
sha256:35fa5d40cf1ca01f0375f4a57cba48315eea1f38e8b46594b40e59ace946efc8
sha256:b2631854b2391bfadd1b47ec501e6b3446635f11836aa1a3555fbb691bf4cb51
sha256:61408ccf33f58c2918096acbf956eb91277686928ef248b23b8b7028966231a5 sha256:2d389e545974d4a93ebdef09b650753a55f72d1ab4518d17a30c0e1b3e297444
sha256:66f88db0ac1d917b46714d00d2ee82210af48afa55376953c6b2af38cdc62ea6 sha256:1df04f456aba3908f6b19ce91f9cab7c530dab8f4ca175efa2bcd3dfe32c3688
sha256:38cc32eea5700d59e0f6a171f896242c1a1ab79d426ad15acd8d41ab3c8c91f8 sha256:2dc39ba059dcd42ade30aae30147b5692777ba9ff0779a62ad93a74de02e3e1f
sha256:75993dd36176c7d4be8c1e6d88a115f1fb35a85451088699dbdc80659ad688ed
sha256:ad451517b273d74c080edd5fbcd3bccbb5e6b3bce5be8c002512f5656b957f79
sha256:2d389e545974d4a93ebdef09b650753a55f72d1ab4518d17a30c0e1b3e297444
위 결과를 보면 아래에서 4번째 줄을 보면 38cc32로 시작하는 이미지가 우리가 2dc39ba 이미지의 자식임을 알 수 있습니다. 따라서 해당되는 두개의 이미지를 같이 지워주면 다음과 같이 이미지를 지울 수 있습니다.
$ docker image rm 38cc32eea570 2dc39ba059dc
Untagged: my-ubuntu:0.1
Deleted: sha256:38cc32eea5700d59e0f6a171f896242c1a1ab79d426ad15acd8d41ab3c8c91f8
Deleted: sha256:e8bb83840f3339c0e86348cf01a2eb1340488186c34e430addab31f05778bf7c
Untagged: ubuntu@sha256:20fa2d7bb4de7723f542be5923b06c4d704370f0390e4ae9e1c833c8785644c1
Deleted: sha256:2dc39ba059dcd42ade30aae30147b5692777ba9ff0779a62ad93a74de02e3e1f
Deleted: sha256:7f5cbd8cc787c8d628630756bcc7240e6c96b876c2882e6fc980a8b60cdfa274
그리고나서 마지막으로 image 목록을 확인하면 다음과 같이 결과를 확인할 수 있습니다.
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
my-ubuntu-02 0.1 9c36e432fe81 12 days ago 119MB
ubuntu latest cdb68b455a14 2 weeks ago 77.8MB
mytest-django-test latest 35fa5d40cf1c 5 weeks ago 976MB
mytest-nginx-test latest b2631854b239 5 weeks ago 142MB
nginx-test latest 61408ccf33f5 5 weeks ago 142MB
practice-test latest 66f88db0ac1d 5 weeks ago 972MB
postgres latest 75993dd36176 8 weeks ago 376MB
mytest-psql-test latest ad451517b273 8 weeks ago 376MB
nginx latest 2d389e545974 8 weeks ago 142MB
python 3.10.4 e4ccc57bca82 5 months ago 920MB
hello-world latest feb5d9fea6a5 13 months ago 13.3kB
django latest eb40dcf64078 5 years ago 436MB
사례2) docker compose를 통한 이미지 빌드가 안될때(rpc error)
2-1. 문제 상황 설명
도커 컴포즈를 이용해 빌드를 하는데 다음과 같은 에러 메시지가 발생합니다.
$ docker compose up -d --build
[+] Building 0.0s (4/5)
=> [ai_portal_dl_ai_solution internal] load build definition from Dockerfile
=> => transferring dockerfile: 32B
=> [ai_portal_nginx internal] load build definition from Dockerfile
=> => transferring dockerfile: 2B
=> [ai_portal_dl_ai_solution internal] load .dockerignore
=> => transferring context: 2B
=> CANCELED [ai_portal_dl_ai_solution internal] load metadata for docker.io/library/python:3.9.7
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount161974054/Dockerfile: no such file or directory
위 메시지를 보면 해당 도커 파일이 존재하지 않거나 경로가 존재하지 않는다는 것을 알 수 있습니다.
2-2. 해결 방법
위 문제의 해결 방법은 docker compose가 빌드하는 하위 폴더들의 Dockerfile의 이름을 확인해보면 문제의 원인을 알 수 있습니다. Dockerfile의 이름은 Dockerfile이어야지 DockerFile이면 안됩니다. 따라서 DockerFile로 잘못이름 붙여진 파일의 이름을 다시 Dockerfile로 고쳐주면 잘 돌아가는 것을 볼 수 있습니다.
사례 3) docker compose를 통한 이미지 빌드가 안될때(용량 부족)
3-1. 문제 상황 설명
도커 컴포즈를 이용해 빌드를 하려는데 no space on device라며 용량이 부족하다는 메시지가 뜹니다.
3-2. 해결 방법
위와 같이 용량이 부족한 경우에는 docker service prune
명령어를 이용해 필요없는 것들을 모두 지웁니다.
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
위와 같이 쓸데없는것을 지우면 용량이 늘어나서 빌드가 잘 되는 것을 볼 수 있습니다.