Docker Machine: Không còn chỗ trống trên thiết bị


126

Tôi đang cố gắng thiết lập Docker Machine với Docker Compose.

Kịch bản 1 (không có Docker Machine)
Nếu tôi chạy docker-compose up -dmà không có Docker Machine, nó sẽ tạo ra 3 container được liên kết của tôi như ý định (nginx + mongodb + nodejs).

Kịch bản 2 (với Docker Machine)
Sau đó, tôi tạo VM bằng Docker Machine và bảo Docker nói chuyện với máy đó eval $(docker-machine env streambacker-dev).

Tại thời điểm này, nếu tôi ssh đến máy docker của tôi và chạy df -h, tôi nhận được:

máy docker df -h

Nếu sau đó tôi chạy docker-compose up -d, tôi sẽ gặp lỗi "không còn chỗ trống trên thiết bị" trong khi tải xuống bộ chứa cuối cùng.

"tmpfs" dường như thực sự đầy một chút sau đó:

máy docker df -h

Kiểm tra tùy chọn kích thước --virtualbox-đĩa cho thấy nó mặc định là 20000 MB, mà tôi nghĩ là những gì chúng ta có thể thấy là "/ dev / sda1" trên cả hai ảnh. Vậy tại sao các container chứa đầy "tmpfs" n và chính xác thì "tmpfs" là gì? Là một thư mục tải về tạm thời? Làm thế nào tôi có thể tạo thêm không gian cho container của mình?

Cảm ơn!

Để biết thông tin, tôi đang sử dụng Docker Machine 0.4.0-rc2Docker Compose 1.3.2 .


4
Không tmpfscó gì để làm với --virtualbox-disk-size. Nó là một hệ thống tập tin (như đĩa RAM) được gắn trong bộ nhớ và không có gì truy cập vào đĩa của bạn.
0x7d7b

Cảm ơn @ h3nrik vì thông tin đó.
Marc Perrin-Pelletier

2
kiểm tra với những thứ lơ lửng của docker, như hình ảnh lơ lửng, khối lượng lơ lửng và xóa chúng. docker rmi $(docker images -f dangling=true -q)docker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu

Câu trả lời:


87

Giống như đã nói ở trên, tmpfskhông có gì để làm với --virtualbox-disk-size. Có vẻ như boot2docker gắn tmpfsvào bộ nhớ, vì vậy bạn cần dành nhiều bộ nhớ hơn cho vm hộp ảo của mình. Bạn có thể làm điều đó bằng cách chỉ định --virtualbox-memorytham số.

   --virtualbox-memory "1024"
Size of memory for host in MB [$VIRTUALBOX_MEMORY_SIZE]

Mặc định:

$ docker-machine create --driver virtualbox testA
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testA
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@testA:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   896.6M    112.7M    783.9M  13% /

Với --virtualbox-memorythiết lập thành8096

$ docker-machine create --driver virtualbox --virtualbox-memory 8096 testB
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testB
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@testB:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                     6.9G    112.4M      6.8G   2% /

14
Không trực quan lắm, nhưng điều này đã làm việc. Cái quái gì, Docker?
BastiBen

1
Không trực quan thực sự! Tuy nhiên, đây có vẻ là vấn đề với điều này và đã sửa nó cho tôi. Vì vậy, +1.
Ray Pendergraph

Đã khắc phục sự cố cho tôi, tôi không hiểu làm thế nào, nhưng cảm ơn bạn!
Bendihossan

Có cách nào để tăng kích thước mặc định để tôi không phải chỉ định thủ công mỗi lần không?
CGFoX

124

Tôi đã có cùng một lỗi ( [ERROR] InnoDB: Error number 28 means 'No space left on device') và giải quyết nó theo cách này:

1. Xóa khối lượng mồ côi trong Docker, bạn có thể sử dụng lệnh âm lượng docker tích hợp. Lệnh tích hợp cũng xóa bất kỳ thư mục nào trong / var / lib / docker / volume không phải là ổ đĩa, vì vậy hãy đảm bảo bạn không đặt bất cứ thứ gì vào đó mà bạn muốn lưu.

Cảnh báo rất cẩn thận với điều này nếu bạn có một số dữ liệu bạn muốn giữ

Dọn dẹp:

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

Các lệnh bổ sung:

Liệt kê khối lượng lơ lửng:

$ docker volume ls -qf dangling=true

Liệt kê tất cả các tập:

$ docker volume ls

2. Cũng xem xét loại bỏ tất cả các hình ảnh không sử dụng.

Trước tiên hãy loại bỏ các <none>hình ảnh (đôi khi chúng được tạo trong khi xây dựng một hình ảnh và nếu vì bất kỳ lý do nào việc xây dựng hình ảnh bị gián đoạn, chúng vẫn ở đó).

đây là một kịch bản hay mà tôi sử dụng để loại bỏ chúng

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

Sau đó, nếu bạn đang sử dụng Docker Compose để xây dựng hình ảnh cục bộ cho mọi dự án. Bạn sẽ kết thúc với rất nhiều hình ảnh thường được đặt tên như thư mục của bạn (ví dụ nếu thư mục dự án của bạn có tên Hello, bạn sẽ tìm thấy tên hình ảnh Hello_blablabla). vì vậy cũng xem xét loại bỏ tất cả những hình ảnh

bạn có thể chỉnh sửa tập lệnh trên để xóa chúng hoặc xóa chúng bằng tay với

docker rmi {image-name}


3
Trên Mac, tôi đã phải sử dụng các dấu ngoặc đơn (') xung quanh các giá trị đối số : docker rmi $(docker images | grep '^<none>' | awk '{print $3}'). Việc loại bỏ các container bị dừng có thể được thực hiện docker rm $(docker ps -qa --no-trunc --filter "status=exited")như được mô tả ở đây: stackoverflow.com/a/32723127/619659 .
Webdevotion

1
Tôi đã có rất nhiều hình ảnh không sử dụng, tôi đã đạt đến giới hạn ký tự của vỏ. Đó là lý do tại sao tôi đã làm docker images | grep "^<none>" | xargs docker rmi.
Matthias Braun

1
Loại bỏ những hình ảnh không cần thiết đã giúp tôi.
akauppi

docker volume prune
justin.m.chase

.. thấy tôi mô tả từng bước cho thay đổi kích thước / var / lib / Docker sử dụng resize2fs trong chủ đề khác: stackoverflow.com/questions/32485723/...
Alex

65

Nếu bạn đang sử dụng Docker Community Edition:

 docker system prune
 docker volume prune  # as suggested by @justin-m-chase since system prune does not clean volumes.

Nếu bạn đang sử dụng boot2docker (docker-machine), hãy xóa các ổ đĩa mồ côi:

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

Xóa hình ảnh không sử dụng:

 docker rmi $(docker images -q -f "dangling=true")

6
docker system pruneđã giúp tôi
Maxim Yefremov

2
docker system pruneftw
Michael Guild

1
docker volume prunechỉ với khối lượng, hệ thống cắt tỉa sẽ không xóa khối lượng lơ lửng.
justin.m.chase

Khi những điều trên không làm bạn đủ không gian, đây là tùy chọn hạt nhân : docker rmi $(docker images -q). Thêm --forcenếu bạn phải khi nó bỏ qua một loạt các lớp được bao gồm trong nhiều thùng chứa.
EmptyArsenal

14

A. BỎ L IM HÌNH ẢNH

sử dụng các lệnh docker rm hoặc docker rmi bạn có thể xóa các hình ảnh mà bạn không cần. Trên thực tế tồn tại một hình ảnh giúp trong nhiệm vụ này (martin / docker-dọn dẹp-volume). Cơ sở là bắt đầu selectig từ danh sách hình ảnh và thùng chứa của bạn:

docker ps -a -s

B. SỬA ĐỔI MÔ TẢ JSON DOCKER

nó được đề cập trong một số diễn đàn. Ý tưởng là tăng bộ mô tả nằm trong ~ / .docker / machine / Machines / default / config.json. Thông số có vẻ là DiskSize nhưng tôi không biết nếu nó hoạt động trong các HĐH khác (không phải trong windows).

C. KẾT QUẢ LINUX:

Trong HĐH Windows, máy docker hoặc boot2docker trên thực tế là một hộp ảo vm, sau đó bạn có thể làm theo quy trình để thay đổi kích thước đĩa. Hãy cẩn thận để sao lưu các tập tin. Quy trình chung là tạo một kích thước thay đổi trong hộp ảo và sau đó sử dụng một tiện ích được gọi là gpartd để sửa đổi không gian được linux cảm nhận trong các phân vùng của nó. Có một số liên kết để làm thủ tục này được tham khảo dưới đây:

D. TÌM KIẾM MÁY-KHÓA / BOOT2DOCKER

Ý tưởng được tạo lại docker-machine mặc định. Các lệnh sau có thể minh họa cho bạn. Lưu ý rằng khi bạn đang tạo lại boot2docker, bạn sẽ mất các hình ảnh docker đã tải xuống trước đó.

docker-máy rm mặc định

docker-machine tạo - mặc định virtualbox --virtualbox-đĩa-size "100100"

docker-machine env mặc định

sau đó bạn có thể vào hộp ảo và xem không gian boot2docker bằng lệnh "df -h"


Cảm ơn. Tôi đã làm việc trên Windows. Tôi đã tạo ra nó bằng cách tạo lại docker-machine.
KinoP

Đã giúp D: (tái tạo máy docker)
StanislavL

Cảm ơn bạn, tái tạo máy docker làm việc cho tôi (Tôi đang ở trên cửa sổ)
Lucha Laura Hardie

Tôi cảm thấy rất nhiều tình yêu!
eduyayo

2

Trên docker osx / Tôi đã có thể nhấn nút [ Move Disk Image ] và nó đã di chuyển thành công Docker.qcow2 (có lẽ chứa container / hình ảnh)

nhập mô tả hình ảnh ở đây ban đầu - khi máy bắt đầu - tôi vẫn nhận được lỗi Không còn chỗ trống trên thiết bị nhưng nó đã được khắc phục ngay sau đó.


0

Tôi gặp vấn đề này và không thể thêm không gian với UI docker cho mac, tôi đã cài đặt docker với homebrew và chạy lệnh sau khi tạo máy của tôi:

docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-disk-size "40000" default

điều này thêm gấp đôi dung lượng bộ nhớ và kích thước đĩa vào hộp ảo mà tôi có trước đây và bạn có thể thêm kích thước cài đặt ở đây mà bạn cần khi bạn thấy phù hợp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.