programing

도커 오류: 장치에 공간이 남아 있지 않습니다.

padding 2023. 9. 15. 20:48
반응형

도커 오류: 장치에 공간이 남아 있지 않습니다.

다음과 같은 방법으로 데비안 7 머신에 도커를 설치했습니다.

$ echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh

그 후 처음 이미지를 생성하려고 했을 때 다음 오류와 함께 실패했습니다.

 time="2015-06-02T14:26:37-04:00" level=info msg="[8] System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1bdaec2630197fa4da1b19cc3db7e3d3883/cgroup.procs: no space left on device"

여기 도커 정보가 있습니다.

Containers: 2
Images: 21
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 25
Dirperm1 Supported: true
Execution Driver: native-0.2
Kernel Version: 3.16.0-0.bpo.4-amd64
Operating System: Debian GNU/Linux 7 (wheezy)
CPUs: 2
 Total Memory: 15.7 GiB


WARNING: No memory limit support
 WARNING: No swap limit support

메모리를 늘리려면 어떻게 해야 합니까?시스템 구성은 어디에 저장됩니까?

칼이 제안한 내용:

이미지와 컨테이너를 모두 없앴을 때 공간이 약간 확보되었고 이미지 빌드가 더 오래 실행된 후 같은 오류가 발생했습니다.그렇다면 문제는 이것이 어느 공간을 가리키고 어떻게 구성하느냐는 것입니다.

현재 모범 사례는 다음과 같습니다.

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]

즉, 이 명령을 계속 수행하는 것은 영구적입니다.가장 좋은 방법은 정지된 컨테이너를 일시적인 것으로 취급하는 것입니다. 즉, 이러한 정지된 컨테이너를 주변에 두지 않도록 Docker와 함께 작업을 설계해야 합니다.컨테이너를 적극적으로 디버깅하지 않는 경우 런타임에 플래그를 사용하는 것을 고려할 수 있습니다.

답변을 꼭 읽어 보십시오. Re: Volumes

당신은 또한 이 대답에 흥미를 느낄지도 모릅니다, 만약docker system prune사용자에게 적합하지 않습니다.

저도 같은 오류가 있어서 이렇게 해결했습니다.

1. Docker에서 고아 볼륨을 삭제하고, 내장된 Docker volume 명령을 사용할 수 있습니다.내장된 명령은 볼륨이 아닌 /var/lib/docker/volumes의 디렉터리도 삭제하므로 저장할 디렉터리에 아무것도 넣지 않았는지 확인합니다.

보관할 데이터가 있을 경우 주의하십시오.

정리:

$ docker volume rm $(docker volume ls -qf dangling=true)

추가 명령:

드리깅 볼륨 목록:

$ docker volume ls -qf dangling=true

모든 볼륨 나열:

$ docker volume ls

2. 사용하지 않는 이미지를 모두 제거하는 것도 고려해 봅니다.

합니다를 .<none>이미지(이미지를 작성하는 동안 생성되는 경우가 있으며 어떤 이유로든 이미지 작성이 중단된 경우 해당 이미지는 해당 위치에 유지됩니다.)

여기에 내가 그들을 제거할 때 사용하는 멋진 대본이 있습니다.

docker rmi $(docker images | awk '/^<none>/ {print $3}')

그런 다음 도커 합성을 사용하여 모든 프로젝트에 대해 이미지를 로컬로 작성하는 경우.과 같은 폴더 이름이 Hello인 경우 로와은의가예이다는에면다지트예(다이u이면지o에ds는x로eyeph(ddlraulrrd ).Hello_blablabla). 하는 것도 해 보십시오 따라서 이러한 이미지를 모두 제거하는 것도 고려해 봅니다.

위 스크립트를 편집하여 제거하거나 수동으로 제거할 수 있습니다.

docker rmi {image-name}

도커가 기본적으로 이미지 파일을 저장하는 곳이므로 /var에 여유 공간이 있는지 확인합니다(/var/lib/docker).

먼저 를 사용하여 물건을 치웁니다.docker ps -a모든 컨테이너(정지된 컨테이너 포함)를 나열합니다.docker rm그것들을 제거하고 나서 사용합니다.docker images하고 있는 해든를다둔다를l든ot둔ue해ded .docker rmi그들을 제거하기 위해서요.

하거나 으로 에서 -g 을 하거나 하여 합니다 를 합니다 를 을 에서 으로 /etc/default/docker는을 더해서을 추가합니다.-g한션션o 옵션DOCKER_OPTS.-g는 기본적으로 이미지를 만들고 컨테이너를 실행할 때 도커가 만드는 모든 것인 "도커 런타임"의 위치를 지정합니다.사용하는 디스크 공간은 시간이 지남에 따라 증가하는 경향이 있으므로 충분한 공간이 있는 위치를 선택합니다.할을 /etc/default/docker 사항을야 합니다. , 을 하려면 을 해야 해야 을 .

이제 새로운 이미지를 만들 수 있어야 하고(또는 도커 허브에서 하나 꺼낼 수 있어야 합니다), -g 옵션으로 지정한 디렉터리에 파일이 많이 생성되는 것을 볼 수 있을 것입니다.

이미 말씀드린 바와 같이.

docker system prune

는 도움이 되지만 사용하지 않는 볼륨을 가지런히 하지 않고 도커 17.06.1 이상을 지원합니다.도커 17.06.1 이후 볼륨도 다음 명령으로 제거합니다.

docker system prune --volumes

Docker 설명서: https://docs.docker.com/config/pruning/

도커 시스템 가지치기 명령은 이미지, 컨테이너 및 네트워크를 가지치기하는 바로 가기입니다.도커 17.06.0 이전 버전에서는 볼륨도 제거됩니다.도커 17.06.1 이상에서는 볼륨을 잘라내기 위해 도커 시스템 가지치기의 --volumes 플래그를 지정해야 합니다.

볼륨을 가지치기하고 이미지와 용기를 보관하려는 경우:

docker volume prune

사용하지 않는 모든 컨테이너, 볼륨, 네트워크 및 이미지를 한 번에 제거합니다(https://docs.docker.com/engine/reference/commandline/system_prune/) :

docker system prune -a -f --volumes

부족한 경우 실행 중인 컨테이너를 먼저 제거할 수 있습니다.

docker rm -f $(docker ps -a -q)
docker system prune -a -f --volumes

/var/lib/docker를 늘리거나 공간이 더 많은 다른 위치를 사용하는 것도 이 오류를 제거할 수 있는 좋은 대안입니다(도커 이미지 설치 디렉토리를 변경하는 방법 참조).

맥용 도커

그렇게docker system prune그리고.docker system prune --volumes다른 답변에서 제안한 것은 매번 공간을 확보했지만, 결국 무엇이든 실행할 때마다 오류가 발생했습니다.

루트 문제를 실제로 해결한 것은Docker.rawMac용 도커가 저장에 사용하는 파일을 저장하고 다시 시작합니다.

해당 파일을 찾으려면 Mac용 도커를 열고*로 이동합니다.

Preferences > Resources > Advanced > Disk Image Location

*이는 버전 2.2.0.5용이지만 이전 버전에서는 유사해야 합니다.

Mac**용 도커의 최신 버전에서는 UI의 디스크에 있는 해당 파일의 실제 크기와 최대 할당된 크기를 보여줍니다.여러분은 아마 그것이 거대하다는 것을 알게 될 것입니다.예를 들어 제 기계에서는 41GB였습니다!

**이전 버전에서는 UI의 실제 디스크 사용량을 보여주지 않으며, MacOS Finder에서는 항상 파일 크기를 최대 할당된 크기로 표시합니다.단말기에서 디렉토리를 열고 실행하면 디스크의 실제 크기를 확인할 수 있습니다.du -h Docker.raw

삭제했습니다.Docker.raw, Mac용 도커를 다시 시작했고, 파일이 자동으로 다시 생성되어 0GB로 복구되었습니다.

물론 도커 캐시를 잃어버렸지만 모든 것이 이전처럼 계속 작동했습니다.예상대로 몇 개의 도커 명령어를 실행한 후 파일이 몇 GB의 내용물로 다시 채워지기 시작했지만 41GB에는 미치지 못했습니다.


갱신하다

몇 달 후에, 내Docker.raw비슷한 크기로 다시 채워졌습니다.그래서 이 방법은 효과가 있었지만 몇 달에 한 번씩 반복해야 합니다.저는 괜찮습니다.

이것이 작동하는 이유에 대한 메모 - 맥용 도커의 버그라고 가정해야 합니다. ㅇㅇ 요. ㅇㅇ.docker system prune/docker system prune --volumes이 파일의 내용을 완전히 지워야 하지만 파일에 이러한 명령어로 삭제할 수 없는 다른 내용이 누적되어 있는 것으로 보입니다.어쨌든 수동으로 삭제하면 문제가 해결됩니다!

단지 Docker의 테스트 설치일 뿐이며(생산은 아님) 핵 청정 작업에 관심이 없는 경우 다음을 수행할 수 있습니다.

합니다: 를 합니다 합니다 를 .docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm

모든 이미지를 지웁니다.docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f

다시 말씀드리지만, 저는 도커를 개발할 때 어떤 심각한 QA나 프로덕션 경로가 아니라 제 ec2 인스턴스에서 이를 사용합니다.은커이면이다는은다는이e'oft(sdty은stdgrrsueke은docker pull.

Docker Desktop(도커 데스크톱)을 사용하는 경우 Docker의 Preferences(기본 설정)로 이동하여 고급 설정에서 디스크 이미지 크기를 늘릴 수 있습니다.

macOS의 스크린샷은 다음과 같습니다.

Docker Desktop on macOS, Resources, Advanced, Disk image size

RHEL 머신에서도 이 문제가 발생하였습니다.스택 오버플로우 및 도커 허브 커뮤니티 어디에서도 적절한 솔루션을 찾지 못했습니다.아래 명령을 수행한 후에도 이 문제가 발생할 경우:

도커 시스템 가지치기 --all

최종적으로 작동한 솔루션:

  1. 도커 정보
    • 현재 도커 저장 드라이버를 확인하려면 다음과 같이 하십시오.
    • 저는 : Storage Driver : devicemapper; overlay2로 스토리지 드라이버를 가지고 있다면 걱정할 것이 없습니다.해결책은 여전히 당신에게 도움이 될 것입니다.
  2. df-h
    • 이는 컴퓨터에서 사용 가능한 파일 시스템과 해당 파일 시스템이 마운트된 경로를 확인하기 위함입니다.노트를 가질 두 개의 마운트된 경로:
    • /dev/mapper/rootvg-var 7.6G 1.2G 6.1G 16% /var
    • /dev/mapper/rootvg-apps 60G 9.2G 48G 17% /apps
    • 참고: 기본적으로 도커 저장 경로는 /var/lib/docker입니다.사용 가능한 공간이 ~6GB이므로 모든 공간 관련 문제가 발생합니다.따라서 기본적으로 사용 가능한 공간이 더 많은 다른 스토리지로 기본 스토리지를 이동해야 합니다.저의 경우 /apps에 탑재된 파일 시스템 경로 '/dev/mapper/rootvg-apps'입니다.이제 /var/lib/docker를 /apps/newdocker/docker와 같은 곳으로 옮기는 작업입니다.
  3. mkdir/도커/신규 도커/도커
  4. chmod-R777/앱스/뉴도커/도커
  5. ◦ / 아래에 있는입니다./usr/lib/systemd/system 아래에 Linux 파일 serive 있는
    • vi /usr/lib/systemd/systemd/server.service
  6. 저장 장치가 devicemapper인 경우 기존 Exec 시작 줄에 코멘트를 추가하고 [Service] 아래에 아래에 추가합니다.
    • ExecStart=
    • ExecStart=/usr/bin/dockerd -s devicemapper --storage-opt dm.fs=xfs --storage-opt dm.basize=40GB -g/docker/newdocker/docker --exec-opt native.cgroupdriver=cgroupfs
  7. 또는 저장 장치가 overlay2인 경우:
    • 기존 ExexStart 문에 -g /apps / newdocker / docker 를 추가하기만 하면 됩니다.
    • ExecStart=/usr/bin/dockerd -g/dockerd/newdocker/dockerd -Hfd:// --dockerd=/run/dockerd/dockerd와 같은 것입니다.
  8. rm -rf /var /lib/docker (기존 도커 데이터를 모두 삭제합니다)
  9. systemctl stop docker
  10. ps aux | grep -i 도커 | grep -v grep
    • 위 명령으로 출력이 생성되지 않은 경우 아래 명령으로 systemd daemon을 reload합니다.
  11. systemctl 데몬-인스턴스
  12. systemctl start 도커
  13. 도커 정보
    • 새 파일 시스템에 도킹한 후의 Data Space Available: 62.15GB를 확인합니다.
  14. 다 했어요.

도커 설정으로 이동하여 사용 가능한 이미지 공간을 변경했습니다.를는안에다새hewegt로새deet안를는h docker build 가능한 뿐입니다. 그래서 가능한 양을 늘렸을 뿐입니다.

Image from MacOS docker dashboard

저 같은 경우는 제가 직접 해봤습니다.docker system df더 공간을 떤성은을지고는다서고가더e다는서od,떤고s성td,nthedgi가docker system prune -a매달린 모든 용기, 이미지 등을 정리합니다.저는다를 했습니다.docker volume rm $(docker volume ls -qf dangling=true)널려있는 책들을 치우기 위해서입니다.

아래는 순서대로 실행되는 명령어입니다.

docker system df
docker system prune -a
docker volume rm $(docker volume ls -qf dangling=true)

제 경우에는 이미지/컨테이너가 그렇게 많지는 않았지만 빌드 캐시가 도커 디스크를 채우고 있었습니다.

를 실행하면 문제가 발생한다는 것을 알 수 있습니다.

docker system df

출력:

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              22                  13                  7.581GB             3.899GB (51%)
Containers          15                  0                   2.166GB             2.166GB (100%)
Local Volumes       4                   4                   550.2MB             0B (0%)
Build Cache         611                 0                   43.83GB             43.83GB!!!!!!!!!

아래 명령을 사용하면 해당 문제가 해결됩니다.

docker builder prune

도커는 당신의 공간을 차지할 수 있는 이미지를 주변에 매달아 둡니다.도커 후 정리하려면 다음을 실행합니다.

docker image prune [-af if you want to force remove all images]

또는 이전 버전의 도커의 경우:

docker rm $(docker ps -q -f 'status=exited')
docker rmi $(docker images -q -f "dangling=true")

이렇게 하면 종료되고 매달린 이미지가 제거되어 장치 공간이 사라지기를 바랍니다.

  1. 이미지 클린 docker rmi $(docker images -f "dangling=true" -q)
  2. 원하지 않는 볼륨 제거
  3. 사용하지 않는 이미지 제거
  4. 사용하지 않는 용기 제거

1. 용기 제거:

$ docker rm $(docker ps -aq)

2. 이미지 제거:

$ docker rmi $(docker images -q)

1단계와 2단계를 수행하는 대신 다음을 수행할 수 있습니다.

docker system prune

이 명령은 다음을 제거합니다.

  • 정지된 모든 컨테이너
  • 하나 이상의 컨테이너에서 사용하지 않는 모든 볼륨
  • 하나 이상의 컨테이너에서 사용하지 않는 모든 네트워크
  • 모든 달링 이미지

다음을 사용할 수도 있습니다.

docker system prune

또는 볼륨만 있는 경우:

docker volume prune

사용하지 않는 용기를 이미 청소한 경우 다음과 같은 이미지를 사용합니다.

docker system prune -a

건강에 좋지 않은 용기가 있는지 확인해 보세요.그들은 정말 이상하고 예측할 수 없는 방식으로 행동할 수 있습니다.이 때문에 저 같은 경우에는 디스크 공간이 엄청나게 많은 오류가 발생했습니다.

docker ps -a 는 모든 컨테이너를 나열합니다.다음과 같이 보이는 경우:

CONTAINER ID   IMAGE          COMMAND   CREATED          STATUS                     PORTS           NAMES
4c01db0b339c   ubuntu:12.04   bash      17 seconds ago   Up 16 seconds (unhealthy)  3300-3310/tcp   webapp

도커 데몬을 다시 시작해야 합니다.

ubuntu-server 18.04.1을 설치한 경우 [어떤 이상한 이유로] 750GB가 아닌 4GB 크기의 LVM 논리 볼륨을 만들었습니다.따라서 이미지를 풀링할 때 "장치에 공간이 남지 않음" 오류가 발생합니다.해결 방법은 간단합니다.

lvextend -l 100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

다음 명령을 사용하여 도커를 청소합니다.

docker images --no-trunc | awk '/<none>/ { print $3 }' \
| xargs docker rmi

그냥 실행하지 마세요.docker prune 를 모두 합니다.도커 네트워크, 컨테이너 및 이미지를 모두 삭제합니다.결국 중요한 데이터를 잃게 될 수도 있습니다.

오류가 발생하면 "장치에 공간이 남아 있지 않습니다"라고 표시되므로 공간을 확보해야 합니다.

일부 공간을 확보하는 가장 쉬운 방법은 매달린 이미지를 제거하는 것입니다.

이전에 생성된 이미지를 사용하지 않을 경우 해당 이미지를 드리깅 이미지 또는 제거할 수 있는 일부 캐시 이미지라고 합니다.

아래 명령을 사용합니다.모든 행잉 이미지를 나열합니다. 이미지 ID.

docker images -f "dangling=true" -q

이미지 ID로 이미지를 제거합니다.

docker rmi IMAGE_ID

이렇게 하면 공간을 확보하고 다시 도커로 해킹을 시작할 수 있습니다 :)

에는 다음과 같은 cgroups가 .cpuset컨트롤러 활성화.이 컨트롤러는 작업을 실행할 수 있는 CPU/메모리 뱅크를 세밀하게 지정할 수 있는 NUMA 환경에서 주로 유용합니다.

으로 cpuset.mems그리고.cpuset.cpus set는 있지 을 의미하므로.not set 지음은아지이을 "음다로가 "한을지" "다아음을가e로ttthr,이ose"

이 문제를 해결하는 가장 쉬운 방법은cgroup.clone_children루트 cgroup에서 1.에는,다가 .

echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children

으로 의 를 으로 하도록 합니다 이 합니다 하도록 을 자동으로 초기화하도록 에 지시합니다.cpuset.mems그리고.cpuset.cpus그들의 부모님 c그룹에서.

Docker Toolkit을 통해 boot2docker 이미지를 사용하는 경우 boot2docker 가상 시스템의 공간이 부족하기 때문에 문제가 발생합니다.

를 할 때.docker import이미지를 는운를면다가e가ro으로 복사됩니다./mnt/sda1꽉 찼을 수도 있어요

한 "vm" "vm" "ssh"를 실행하는 입니다.df -h /고 /mnt/sda1은다을/en다dk을은m/ssa

는 ssh docker-machine ssh default

이 문제가 정말로 공간 문제라는 것이 확실해지면, 이 질문에 대한 답변 중 일부에 나와 있는 지침에 따라 정리하거나, 또는 의 공간을 늘려 부트2도커 이미지 자체의 크기를 조정하도록 선택할 수 있습니다./mnt/sda1

여기에 나와 있는 지침에 따라 이미지 크기를 조정할 수 있습니다. https://gist.github.com/joost/a7cfa7b741d9d39c1307

아래 명령을 실행합니다.

이후에 이미지를 재구성할 필요가 없습니다.

docker rm $(docker ps -qf 'status=exited')
docker rmi $(docker images -qf "dangling=true")
docker volume rm $(docker volume ls -qf dangling=true)

종료되거나 매달린 컨테이너와 매달린 볼륨을 제거합니다.

기본 스토리지 공간이 40GB(기본 경로, /var/lib/docker)로 설정되어 있기 때문일 수 있습니다.

스토리지 볼륨을 다른 경로를 가리키도록 변경할 수 있습니다.

  • 파일 편집 -> /etc/sysconfig/syser-storage
  • 아래 줄에 업데이트(존재하지 않으면 추가)

DOCKER_STORY_OPTIONS='--storage-driver=pass --graph=Custom_PATH'

  • 다시 시작 도커 system ctl stop 도커 system ctl daemon-reload system ctl start 도커

명령 도커 정보를 실행하는 경우(스토리지 드라이버를 오버레이로 표시해야 함)

가지치기에 대한 글이 너무 많습니다.이 명령어는 도커 파일을 정리하는 것은 사실이지만 실제 저장소에 장애가 발생하더라도 시스템을 수정하지는 않습니다.문제는 서버의 스토리지가 완전히 꽉 차 있다는 것이었습니다.그래서 저는 두 가지 선택권이 있었습니다.

옵션 1: 기존 공간 정리

  1. 다른 사람들이 말한 모든 시스템 가지치기 명령을 실행합니다.
  2. df -H이 이 ?
  3. 에서 을 하는 를 합니다 합니다 를 을 에서 하는 du --block-size=M -a / | sort -n -r | head -n 20 큰파일을 . 20개의 파일과 20개의 파일을 보여줄 겁니다.
  4. 파일을 제거하거나 시스템에서 이동합니다.

옵션 2: 더 많은 공간 확보

  1. 하드 드라이브에 공간을 더 추가하고 확장합니다.저처럼 HD가 한 개밖에 없다면, 저는 "gparted"라는 OS를 탑재하고 드라이브를 확장해야 했습니다.

이런 일이 일어날 수 있는 몇 가지 방법이 있는 것 같습니다.문제는 도커 디스크 이미지가 최대 크기에 도달했다는 것입니다(Docker Whale -> Preferences -> OSX에 있는 크기를 보려면 디스크).

저는 한도를 초과해서 잘 갔습니다.사용하지 않은 이미지를 정리하는 것도 분명 효과가 있을 겁니다.

나를 위해.docker system prune속임수를 썼습니다.저는 macos를 운영하고 있습니다.

저의 경우, 도커 이미지 크기 제한인 10Gb를 초과하고 있어서 발생한 일입니다.이것이 어느 정도 완화되어 100Gb(https://github.com/moby/moby/issues/5151), 로 제한을 늘릴 수 있는 방법이 있는 것 같습니다. 하지만 어떻게 하면 제 경우에는 지도 볼륨으로 전환해도 괜찮을지 모르겠습니다. 이 볼륨은 성능이 더 좋습니다.

저는 GCP 매신에서 이 문제에 직면했습니다.어떤 가지치기 방법도 제게 효과가 없었습니다./var/lib/docker아직 무게가 160Gb 정도 됩니다.고를 막는 보다.service docker stop도커 캐시 폴더를 제거합니다.

sudo rm -rf /var/lib/docker을(를) 후 이 가 클리어 시스템폴더로 되었습니다. 도커 서비스를 다시 시작한 후 이 제거된 폴더가 클리어 도커 시스템 폴더로 재생성되었습니다.물론, 모든 도커 데이터는 풀지만 디스크 공간은 풀 수 있습니다.

/usr/lib/systemd/system/docker.service덧붙이자면-g /apps/newdocker/docker다른 대답들은 나에게 통하지 않았습니다 (rhel8에서)

로 하실 하실 으로 확인 가능합니다.docker info -f '{{ .DockerRootDir }}'

Balldung의 지시에 따라 효과가 있었습니다.

$ sudo vim /etc/docker/daemon.json

경로를 원하는 대로 삽입합니다.

{ 
   "data-root": "/tmp/new-docker-root-dir"
}

그런 다음 일반적인 도커를 다시 시작합니다.

sudo systemctl stop docker
sudo systemctl start docker

언급URL : https://stackoverflow.com/questions/30604846/docker-error-no-space-left-on-device

반응형