ข้อผิดพลาดของนักเทียบท่า: ไม่มีพื้นที่เหลือบนอุปกรณ์


329

ฉันติดตั้งตัวเทียบท่าบนเครื่อง Debian 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

ฉันจะเพิ่มหน่วยความจำได้อย่างไร การกำหนดค่าระบบถูกเก็บไว้ที่ไหน?

จากคำแนะนำของ Kal:

เมื่อฉันกำจัดอิมเมจและคอนเทนเนอร์ทั้งหมดมันเพิ่มพื้นที่ว่างบางส่วนและการสร้างอิมเมจรันนานขึ้นก่อนที่จะล้มเหลวด้วยข้อผิดพลาดเดียวกัน ดังนั้นคำถามคือพื้นที่อ้างอิงนี้คืออะไรและฉันจะกำหนดค่าได้อย่างไร


1
บางครั้งคุณสามารถจำกัด ขนาดต่อคอนเทนเนอร์ได้ขึ้นอยู่กับแบ็กเอนด์ที่เก็บข้อมูลของคุณ ลิงก์นั้นแสดงวิธีการแก้ไขสำหรับผู้พัฒนาซอฟต์แวร์
jpaugh

4
ฉันมีข้อผิดพลาดนี้เมื่อดิสก์ของฉันไม่มี inodes ตรวจสอบdf -ih
Kevin Smyth

@KevinSmyth ขอบคุณมากสำหรับการชี้เรื่องนี้ ฉันไม่รู้ด้วยซ้ำถึงความสำคัญของการ จำกัด ไอโหนดก่อนหน้านี้
yosefrow

คำตอบ:


337

ฉันมีข้อผิดพลาดเดียวกันและแก้ไขด้วยวิธีนี้:

1. ลบไดรฟ์ข้อมูลที่ถูกโยงถึงใน Docker คุณสามารถใช้คำสั่งไดรฟ์ข้อมูลแบบในตัว คำสั่งในตัวยังลบไดเรกทอรีใด ๆ ใน / var / lib / docker / ไดรฟ์ที่ไม่ได้เป็นไดรฟ์ข้อมูลเพื่อให้แน่ใจว่าคุณไม่ได้ใส่อะไรในนั้นที่คุณต้องการบันทึก

คำเตือนระวังอย่างนี้ถ้าคุณมีข้อมูลบางอย่างที่คุณต้องการเก็บไว้

ทำความสะอาด:

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

คำสั่งเพิ่มเติม:

รายการห้อยต่องแต่ง:

$ docker volume ls -qf dangling=true

แสดงรายการเล่มทั้งหมด:

$ docker volume ls

2. ลองพิจารณาลบรูปภาพที่ไม่ได้ใช้ทั้งหมด

ขั้นแรกให้กำจัด<none>ภาพ (บางครั้งก็สร้างขึ้นในขณะที่สร้างภาพและถ้าด้วยเหตุผลใดก็ตามที่การสร้างภาพถูกขัดจังหวะพวกเขาจะอยู่ที่นั่น)

นี่เป็นสคริปต์ที่ดีที่ฉันใช้เพื่อลบออก

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

จากนั้นถ้าคุณใช้ Docker Compose เพื่อสร้างภาพในตัวเครื่องสำหรับทุกโครงการ คุณจะจบลงด้วยภาพจำนวนมากที่มักจะตั้งชื่อเหมือนโฟลเดอร์ของคุณ (ตัวอย่างเช่นถ้าโฟลเดอร์โครงการของคุณชื่อสวัสดีคุณจะพบชื่อภาพHello_blablabla) ดังนั้นให้พิจารณาลบรูปภาพเหล่านี้ทั้งหมด

คุณสามารถแก้ไขสคริปต์ด้านบนเพื่อลบหรือลบออกด้วยตนเอง

docker rmi {image-name}


23
เพียงแค่ทราบ: คำสั่ง awk บน Mac จะต้องล้อมรอบด้วยเครื่องหมายคำพูดเดียวไม่เป็นสองเท่ามิฉะนั้นจะถูกละเว้น
ndtreviv

2
ฉันใช้ MAC และมันใช้งานได้สำหรับฉัน !! แต่ขอบคุณสำหรับคำแนะนำ
Mahmoud Zalt

2
แปลกจัง! มันไม่ทำงานสำหรับฉัน เพียงพิมพ์ผลลัพธ์เดียวกับ grep อ่า สิ่งที่เกิดขึ้นกับคนแปลกหน้า
ndtreviv

3
ณ จุดนี้คุณสามารถใช้ตัวกรองเดียวกันสำหรับรูปภาพ และแน่นอนเอาพวกเขาด้วยdocker images -qf dangling=true docker rmi $(docker images -qf dangling=true)
Tyler Jones

3
ฉันได้รับข้อผิดพลาด: "ตัวเทียบระดับเสียง rm" ต้องมีอาร์กิวเมนต์อย่างน้อย 1 ข้อ
IgorGanapolsky

330

ปรับปรุง
คำสั่งด้านล่างกลายเป็นแฮ็คเมื่อนักเทียบท่าพัฒนามากขึ้น แนวปฏิบัติที่ดีที่สุดในปัจจุบันคือ

docker system prune

สิ่งนี้จะลบ:

- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all dangling images

ด้านล่างนี่คือนิวเคลียร์


ในการทำความสะอาดระบบของคุณก่อนอื่นให้ลบคอนเทนเนอร์

$ docker rm $(docker ps -aq)

จากนั้นลบภาพ

$ docker rmi $(docker images -q)

นี่เป็นนิวเคลียร์แน่นอนและจะลบคอนเทนเนอร์ทั้งหมดและรูปภาพทั้งหมด คุณสามารถลบพวกเขาหนึ่งได้ตลอดเวลาผ่านทางและdocker rm #CONTAINER_ID#docker rmi #IMAGE_ID


2
ดังที่เควินสมิ ธ ชี้ให้เห็นข้อผิดพลาดนี้น่าจะเกิดจากคุณหมด inodes ซึ่งคุณสามารถดูdf -ihได้ หากต้องการวินิจฉัยเพิ่มเติมเกี่ยวกับการผ่าตัดให้ใส่ncduแล้วกด c เพื่อนับจำนวนไฟล์และ C เพื่อเรียงลำดับตามจำนวนไฟล์เพื่อรับการประมาณคร่าวๆของสิ่งที่ใช้ inodes ทั้งหมดของคุณ หากปัญหาคือนักเทียบท่าแน่นอนมันจะปรากฏทันทีโดยไดเรกทอรีที่ใช้ inodes มากที่สุด
yosefrow

2
จริง ๆ แล้วควรได้รับการโหวตและทำคำตอบเนื่องจากเป็นแนวทางที่ถูกต้อง สภาพแวดล้อมสำหรับการสร้างมีการปนเปื้อนและตอนนี้ตัดที่นี่และมีอาจแก้ไขชั่วคราว แต่วิธีการที่เหมาะสมควรจะเป็นdocker system prune
zhrist

@zhrist Haha ฉันเห็นด้วย
Joshua Cook

@ coler-j อาจจะ ... หากคุณกำลังคิดในแง่ของคำถามที่เฉพาะเจาะจงสูง แต่ขอซื่อสัตย์ต่อกัน คนส่วนใหญ่ไม่พบคำถามนี้เนื่องจากกรณีการใช้งานที่ไม่ชัดเจน แต่เนื่องจากแคชนักเทียบท่าของพวกเขาไม่มีพื้นที่เหลือ
Joshua Cook

@JoshuaCook มันเป็นปัญหาที่พบบ่อยมาก: github.com/docker/for-win/issues/1042โดยไม่มีวิธีแก้ปัญหาที่แท้จริง เพียงพยายามหาสาเหตุของมันและมันน่าหงุดหงิดมาก :(
coler-j

70

ตรวจสอบว่าคุณมีพื้นที่ว่างบน / var เนื่องจากเป็นที่ที่ Docker จัดเก็บไฟล์รูปภาพโดยค่าเริ่มต้น (ใน / var / lib / docker)

ก่อนอื่นให้ล้างข้อมูลโดยใช้docker ps -aเพื่อแสดงรายการคอนเทนเนอร์ทั้งหมด (รวมถึงรายการที่หยุด) และdocker rmเพื่อลบออก จากนั้นใช้docker imagesเพื่อแสดงรายการภาพทั้งหมดที่คุณจัดเก็บและdocker rmiลบออก

การเปลี่ยนแปลงต่อไปสถานที่เก็บกับตัวเลือก -G บนภูตนักเทียบท่าหรือโดยการแก้ไข/etc/default/dockerและการเพิ่มตัวเลือกในการ-g ระบุตำแหน่งของ "นักเทียบท่ารันไทม์" ซึ่งโดยพื้นฐานแล้วทุกอย่างที่นักสร้างจะสร้างเมื่อคุณสร้างอิมเมจและเรียกใช้คอนเทนเนอร์ เลือกตำแหน่งที่มีพื้นที่เหลือเฟือเนื่องจากพื้นที่ดิสก์ที่ใช้จะมีแนวโน้มเพิ่มขึ้นเมื่อเวลาผ่านไป หากคุณแก้ไขคุณจะต้องรีสตาร์ท docker daemon เพื่อให้การเปลี่ยนแปลงมีผลDOCKER_OPTS-g/etc/default/docker

ตอนนี้คุณควรจะสามารถสร้างภาพใหม่ (หรือดึงหนึ่งภาพจาก Docker Hub) และคุณจะเห็นกลุ่มของไฟล์ที่ถูกสร้างขึ้นในไดเรกทอรีที่คุณระบุด้วยตัวเลือก -g


ขอบคุณ Kal ฉันไม่สามารถหาเอกสารเกี่ยวกับ DOCKER_OPTS อ็อพชัน -g หมายถึงอะไรและควรตั้งค่าเป็นอะไร นอกจากนี้สิ่งที่อยู่ภายใต้ docker / aufs / mnt สามารถลบได้หรือไม่?
user_mda

สวัสดีทับทิมฉันไม่คิดว่าฉันเคยพบเอกสารจริงเกี่ยวกับ DOCKER_OPTS แต่มีสถานที่ที่นี่และมีในเอกสารที่พูดถึงการแก้ไข ที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้คือตอนท้ายของdocs.docker.com/installation/ubuntulinux/ซึ่งจะพูดถึงการแก้ไขการตั้งค่า DNS ใน DOCKER_OPTS ตัวเลือกใน DOCKER_OPTS จะถูกส่งผ่านเพียงเพื่อภูตดังนั้นการอ้างอิงสำหรับที่อยู่docs.docker.com/reference/commandline/cli/#daemon -g ตั้งค่าที่ตั้งฐานของ "นักเทียบท่ารันไทม์"
Kal

นอกจากนี้สิ่งที่อยู่ภายใต้ docker / aufs / mnt สามารถลบได้หรือไม่?
user_mda

อย่าลบสิ่งนั้นด้วยตนเอง แทนที่จะลบคอนเทนเนอร์ใด ๆ (รวมถึงที่ออกแล้ว) และรูปภาพที่คุณไม่ต้องการ คุณควรทำสิ่งนี้ก่อนที่จะเปลี่ยนตัวเลือก -g ใช้docker ps -aเพื่อแสดงรายการคอนเทนเนอร์ทั้งหมด (รวมถึงรายการที่ออกแล้ว) จากนั้นdocker rmลบออก ใช้docker imagesเพื่อแสดงรายการภาพทั้งหมดแล้วจึงdocker rmiลบออก หวังว่าจะทำความสะอาดทุกอย่าง (หรือเกือบทุกอย่าง)
Kal

ขอบคุณดังนั้นการล้างรูปภาพและคอนเทนเนอร์จึงเป็นการล้างพื้นที่บางส่วน แต่ภาพที่ใหม่กว่านี้ยังคงต้องการอะไรมากขึ้น แต่สิ่งที่นักเทียบท่ารันไทม์ควรชี้ไปที่ใด? มีวิธีเพิ่มพื้นที่ที่นักเทียบท่าใช้เพื่อเก็บภาพหรือไม่?
user_mda

38

ดังที่ได้กล่าวไปแล้ว

docker system prune

ช่วยด้วย Docker 17.06.1 และใหม่กว่าโดยไม่ต้องตัดแต่งวอลลุ่มที่ไม่ได้ใช้ ตั้งแต่ Docker 17.06.1 คำสั่งต่อไปนี้จะลดปริมาณการใช้งานเช่นกัน:

docker system prune --volumes

จากเอกสารนักเทียบท่า: https://docs.docker.com/config/pruning/

คำสั่งตัดระบบนักเทียบท่าเป็นทางลัดที่ตัดภาพภาชนะและเครือข่าย ใน Docker 17.06.0 และรุ่นก่อนหน้านี้ไดรฟ์ข้อมูลจะถูกตัดด้วย ใน Docker 17.06.1 และสูงกว่าคุณต้องระบุแฟล็ก --volumes สำหรับการตัดระบบของนักเทียบท่าเพื่อตัดโวลุ่ม

หากคุณต้องการตัดวอลลุ่มและเก็บภาพและภาชนะบรรจุ:

docker volume prune

3
docker volume pruneช่วยฉันวันนี้เมื่อโซลูชันอื่น ๆ ทั้งหมดที่นี่หยุดทำงาน
AVProgrammer

1
ความช่วยเหลืออย่างมาก - นอกเหนือจากการแก้ไขข้อผิดพลาดสิ่งนี้ทำให้พื้นที่มากมายในฮาร์ดไดรฟ์ของฉัน
Matt Browne

29

หากเป็นเพียงการติดตั้งทดสอบ 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

อีกครั้งฉันใช้สิ่งนี้ในอินสแตนซ์ ec2 ของฉันเมื่อพัฒนานักเทียบท่าไม่ใช่ใน QA หรือเส้นทางการผลิตที่จริงจัง สิ่งที่ดีคือว่าถ้าคุณมีของคุณ Dockerfile (s), docker pullมันเป็นเรื่องง่ายที่จะสร้างและหรือ


1
ในกรณี boot2docker docker images -a | sed '1 d' | awk '{print $3}' | xargs docker rmi -fของฉันฉันมีการเรียก เวอร์ชั่น OS X BSD xargsรองรับ-Lตัวเลือกต่างจากเวอร์ชั่น boot2docker
orluke

1
คุณสามารถใช้docker ps -a -qฯลฯ เพื่อหลีกเลี่ยงการบิดเบือนข้อความเช่นdocker rm $(docker ps -a -q); docker rmi -f $(docker images -a -q)ควรทำเคล็ดลับ
Niklas B.

21

เพื่อลบคอนเทนเนอร์วอลุ่มเครือข่ายและรูปภาพทั้งหมดในคราวเดียว ( https://docs.docker.com/engine/reference/commandline/system_prune/#related- คำสั่ง ):

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ไม่ลบโวลุ่ม
Bonifacio2

1
docker system prune -a -f --volumesจะลบโวลุ่ม
Jimson Kannanthara James

19

Docker สำหรับ Mac

ดังนั้นdocker system pruneและdocker system prune --volumesแนะนำในคำตอบอื่น ๆ ปลดปล่อยบางว่างในแต่ละครั้ง แต่ในที่สุดทุกครั้งที่ฉันวิ่งไปทุกอย่างฉันก็พบข้อผิดพลาด

สิ่งที่แก้ไขปัญหารากได้จริงคือการลบDocker.rawไฟล์ที่นักเทียบท่าสำหรับ Mac ใช้สำหรับการจัดเก็บและรีสตาร์ท

ในการค้นหาไฟล์นั้นให้เปิด Docker สำหรับ Mac และไปที่ *

Preferences > Resources > Advanced > Disk Image Location

* นี่สำหรับเวอร์ชั่น 2.2.0.5 แต่สำหรับเวอร์ชั่นเก่ามันควรจะคล้ายกัน

สำหรับ Docker for Mac รุ่นใหม่กว่าจะแสดงขนาดจริงของไฟล์นั้นบนดิสก์ใน UI และขนาดที่จัดสรรสูงสุด คุณอาจจะเห็นว่ามันมีขนาดใหญ่มาก ตัวอย่างเช่นในเครื่องของฉันมันเป็น41GB !

** สำหรับเวอร์ชั่นเก่าจะไม่แสดงการใช้งานดิสก์จริงใน UI และ MacOS Finder จะแสดงขนาดไฟล์เป็นขนาดที่จัดสรรสูงสุดเสมอ คุณสามารถตรวจสอบขนาดที่แท้จริงบนดิสก์ได้โดยการเปิดไดเรกทอรีในเทอร์มินัลและเรียกใช้du -h Docker.raw

ฉันลบDocker.raw, เริ่มต้นใหม่เทียบท่าสำหรับ Mac และไฟล์ที่ถูกสร้างขึ้นโดยอัตโนมัติอีกครั้งและก็กลับไปเป็น0GB

ทุกอย่างยังคงทำงานเหมือนแต่ก่อนแน่นอนว่าฉันทำแคช Docker หาย อย่างที่คาดไว้หลังจากรันคำสั่ง Docker สองสามคำสั่งไฟล์จะเริ่มเติมข้อมูลอีกครั้งด้วยสิ่งของไม่กี่ GB แต่ไม่มีที่ไหนใกล้ 41GB


ปรับปรุง

ไม่กี่เดือนต่อมาฉันDocker.rawกลับขึ้นมาอีกครั้งด้วยขนาดใกล้เคียงกัน ดังนั้นวิธีนี้ใช้งานได้ แต่ต้องทำซ้ำทุกสองสามเดือน สำหรับฉันมันไม่เป็นไร

ข้อควรทราบเกี่ยวกับสาเหตุของการทำงาน - ฉันต้องสมมติว่าเป็นข้อบกพร่องใน Docker for Mac ดูเหมือนว่าdocker system prune/ docker system prune --volumesควรล้างเนื้อหาของไฟล์นี้ทั้งหมด แต่ดูเหมือนว่าไฟล์จะสะสมสิ่งอื่น ๆ ที่คำสั่งเหล่านี้ไม่สามารถลบได้ อย่างไรก็ตามการลบด้วยตนเองจะช่วยแก้ปัญหา!


15

นักเทียบท่าปล่อยภาพที่ห้อยอยู่รอบ ๆ ซึ่งอาจทำให้พื้นที่ของคุณว่างเปล่า หากต้องการล้างข้อมูลหลังจากนักเทียบท่าให้เรียกใช้ดังนี้:

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

หรือกับ Docker รุ่นเก่ากว่า:

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

การทำเช่นนี้จะลบภาพที่ออกและห้อยอยู่ซึ่งหวังว่าจะทำให้พื้นที่อุปกรณ์หมดไป


14
  1. ทำความสะอาดภาพที่ห้อยต่องแต่ง docker rmi $(docker images -f "dangling=true" -q)
  2. ลบโวลุ่มที่ไม่ต้องการ
  3. ลบภาพที่ไม่ได้ใช้
  4. นำภาชนะที่ไม่ได้ใช้ออก

สำหรับฉันปัญหามีภาพมากเกินไป หลังจากทำความสะอาดแล้วนักเทียบท่าจะทำงานอีกครั้ง
Tran Triet


7

ในกรณีของฉันการติดตั้ง ubuntu-server 18.04.1 [ด้วยเหตุผลแปลก ๆ ] ได้สร้างโลจิคัลวอลุ่ม LVM ด้วยขนาด 4GB เพียงแทนที่จะเป็น 750GB ดังนั้นเมื่อดึงภาพฉันจะได้รับข้อผิดพลาด "ไม่มีที่เหลือในอุปกรณ์" การแก้ไขนั้นง่าย:

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

.. ดูคำอธิบายทีละขั้นตอนของฉันสำหรับresize2fsในเธรดต่อไปนี้: stackoverflow.com/questions/32485723/…
อเล็กซ์

7

ฉันยังพบปัญหานี้ในเครื่อง RHEL ฉันไม่พบวิธีแก้ปัญหา apt ที่ใดก็ได้ในชุมชน stack-overflow และ docker-hub หากคุณกำลังประสบปัญหานี้แม้หลังจากคำสั่งด้านล่าง:

ลูกพรุนระบบพรุน - ทั้งหมด

วิธีแก้ปัญหาที่ใช้งานได้ในที่สุด:

  1. ข้อมูลนักเทียบท่า
    • เพื่อตรวจสอบไดรเวอร์อุปกรณ์จัดเก็บข้อมูลนักเทียบท่าในปัจจุบัน
    • ของฉันคือ: คนขับเก็บ: 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% / แอป
    • หมายเหตุ - โดยค่าเริ่มต้นที่เก็บข้อมูลของนักเทียบท่าคือ / var / lib / docker มันมีพื้นที่ว่าง ~ 6 GB และด้วยเหตุนี้ปัญหาที่เกี่ยวข้องกับพื้นที่ทั้งหมด ดังนั้นโดยทั่วไปฉันต้องย้ายที่เก็บข้อมูลเริ่มต้นไปยังที่เก็บข้อมูลอื่นที่มีพื้นที่ว่างมากกว่า สำหรับฉันเส้นทางไฟล์ sysyem '/ dev / mapper / rootvg-apps' ซึ่งติดตั้งบน / แอพ ตอนนี้ภารกิจคือการย้าย / var / lib / docker ไปยังสิ่งที่ต้องการ / apps / newdocker / docker
  3. mkdir / apps / newdocker / docker
  4. chmod -R 777 / แอพ / newdocker / docker
  5. อัพเดตไฟล์ docker.serive บน linux ซึ่งอยู่ภายใต้: / usr / lib / systemd / system
    • vi /usr/lib/systemd/system/docker.service
  6. หากอุปกรณ์เก็บข้อมูลเป็น devicemapper ให้แสดงความคิดเห็นบรรทัด ExecStart ที่มีอยู่และเพิ่มด้านล่างภายใต้ [บริการ]:
    • ExecStart =
    • ExecStart = / usr / bin / dockerd -s devicemapper - สตอเรจ -dm dm.fs = xfs - สตอเรกต์ - เลือก dm.basesize = 40GB -g / apps / newdocker / docker --exec-opt native.cgroupfs = cgroupfs
  7. หรือถ้าอุปกรณ์เก็บข้อมูลเป็นแบบ overlay2:
    • เพียงเพิ่ม -g / apps / newdocker / docker ในคำสั่ง ExexStart ที่มีอยู่
    • สิ่งที่ต้องการ ExecStart = / usr / bin / dockerd -g / apps / newdocker / docker -H fd: // --containerd = / run / containerd / containerd.sock
  8. rm -rf / var / lib / docker (มันจะลบข้อมูลนักเทียบท่าที่มีอยู่ทั้งหมด)
  9. systemctl หยุดนักเทียบท่า
  10. ps aux | grep -i docker | grep -v grep
    • หากไม่มีการสร้างเอาต์พุตโดยคำสั่งด้านบนให้รีโหลด systemd daemon โดยคำสั่งด้านล่าง
  11. systemctl daemon-reload
  12. systemctl start docker
  13. ข้อมูลนักเทียบท่า
    • ตรวจสอบพื้นที่ข้อมูลที่มีอยู่: 62.15GB หลังจาก mouting เพื่อเทียบท่ากับระบบไฟล์ใหม่
  14. DONE

ฉันได้ดูเอกสารทั้งหมดเกี่ยวกับวิธีการบรรลุสิ่งนี้! ขอบคุณครับ เราสามารถทำเครื่องหมายสิ่งนี้เป็นคำตอบข้อหนึ่งได้หรือไม่?
Vulegend

6

ทำความสะอาด Docker โดยใช้คำสั่งต่อไปนี้:

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

4

กลุ่ม cg ของคุณcpusetเปิดใช้งานคอนโทรลเลอร์ คอนโทรลเลอร์นี้มีประโยชน์ส่วนใหญ่ในสภาพแวดล้อม NUMA ที่อนุญาตให้ระบุ CPU / หน่วยความจำของธนาคารที่อนุญาตให้ทำงานได้อย่างละเอียด

โดยค่าเริ่มต้นบังคับcpuset.memsและcpuset.cpusไม่ได้ตั้งซึ่งหมายความว่ามี "ไม่มีพื้นที่เหลือ" สำหรับงานของคุณจึงเกิดข้อผิดพลาด

วิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้คือการเปิดใช้งานcgroup.clone_children1 ในรูท cgroup ในกรณีของคุณมันควรจะเป็น

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

โดยพื้นฐานแล้วมันจะสั่งให้ระบบเริ่มต้นคอนเทนเนอร์ของcpuset.memsและcpuset.cpusจาก cgroup แม่โดยอัตโนมัติ


1
นี่คือคำตอบที่ถูกต้อง เพียงอัปเกรด Docker เป็นอะไรก็ได้> = Docker 1.8 ควรแก้ไข สิ่งนี้เกี่ยวข้องกับgithub.com/opencontainers/runc/issues/133 จากปัญหานี้สิ่งที่อาจเป็นไปได้อีกอย่างหนึ่งคือ "echo 0 > /sys/fs/cgroup/cpuset/system.slice/cpuset.mems
cpuguy83

2

หากคุณกำลังใช้อิมเมจ boot2docker ผ่าน Docker Toolkit แสดงว่าปัญหาเกิดจากข้อเท็จจริงที่ว่าเครื่องเสมือน boot2docker มีพื้นที่ว่างไม่เพียงพอ

เมื่อคุณทำdocker importหรือเพิ่มภาพใหม่ภาพจะถูกคัดลอกลงใน/mnt/sda1ซึ่งอาจจะเต็ม

วิธีหนึ่งในการตรวจสอบพื้นที่ที่คุณมีอยู่ในภาพคือการ ssh ใน vm และเรียกใช้ df -hและตรวจสอบพื้นที่ที่เหลือใน / mnt / sda1

คำสั่ง ssh คือ docker-machine ssh default

เมื่อคุณแน่ใจว่าเป็นปัญหาพื้นที่แน่นอนคุณสามารถล้างข้อมูลตามคำแนะนำในบางคำตอบของคำถามนี้หรือคุณอาจเลือกปรับขนาดอิมเมจ boot2docker ด้วยตัวเองโดยเพิ่มพื้นที่ว่างบน /mnt/sda1

คุณสามารถทำตามคำแนะนำที่นี่เพื่อทำการปรับขนาดของภาพ https://gist.github.com/joost/a7cfa7b741d9d39c1307


2

หากคุณกำลังใช้หางสก์ท็อปคุณสามารถเพิ่มขนาดภาพดิสก์ในการตั้งค่าขั้นสูงโดยไปที่หางของการตั้งค่า

นี่คือภาพหน้าจอจาก macOS:

Docker Desktop สำหรับ MacOS, ทรัพยากร, ขั้นสูง, ขนาดภาพดิสก์


1

อาจเป็นเพราะพื้นที่เก็บข้อมูลเริ่มต้นตั้งค่าเป็น 40GB (เส้นทางเริ่มต้น / var / lib / docker)

คุณสามารถเปลี่ยนปริมาณการจัดเก็บเพื่อชี้ไปที่เส้นทางที่แตกต่าง

  • แก้ไขไฟล์ -> / etc / sysconfig / docker-storage
  • อัปเดตด้านล่างบรรทัด (เพิ่มหากไม่มีอยู่)

DOCKER_STORAGE_OPTIONS = '- storage-driver = overlay --graph = CUSTOM_PATH'

  • รีสตาร์ทตัวเชื่อมต่อ systemctl หยุดตัวเชื่อมต่อ systemctl daemon-reload systemctl start docker

หากคุณเรียกใช้ข้อมูลนักเทียบท่าคำสั่ง (ควรแสดงไดร์เวอร์หน่วยเก็บเป็นแบบโอเวอร์เลย์)


0

ดูเหมือนว่ามีหลายวิธีที่สามารถเกิดขึ้นได้ ปัญหาที่ฉันมีคือดิสก์อิมเมจ docker มีขนาดสูงสุด (Docker Whale -> Preferences -> Disk ถ้าคุณต้องการดูขนาดที่อยู่ใน OSX)

ฉันเพิ่มขีด จำกัด และทำใจได้ดี ฉันแน่ใจว่าการล้างรูปภาพที่ไม่ได้ใช้จะทำงานได้ดี


0

ฉันเรียกใช้คำสั่งด้านล่าง

ไม่จำเป็นต้องสร้างภาพใหม่ในภายหลัง

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

สิ่งเหล่านี้ลบออกจาก / dangling container และ dangling volume


0

สำหรับฉันdocker system pruneได้หลอกลวง ฉันกำลังใช้งานระบบปฏิบัติการ mac os


มันก็ใช้งานได้จริงเช่นกันเมื่อฉันพยายามล้างพื้นที่ที่ใช้หมดไปใน Mac OS การใช้คำสั่งdocker volume lsไม่ส่งคืนสิ่งใดดังนั้นจึงดูเหมือนว่าพื้นที่เก็บข้อมูลส่วนใหญ่ถูกใช้โดยแคชและรูปภาพที่ห้อยอยู่
Tuhin

-3
$ docker rm $(docker ps -aq)

สิ่งนี้ใช้ได้สำหรับฉัน

docker system prune 

ดูเหมือนจะเป็นตัวเลือกที่ดีกว่ากับรุ่นล่าสุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.