質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

3回答

16246閲覧

docker build で 「no space left on device」と出てビルドできない

grovion

総合スコア145

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2017/01/06 01:28

編集2017/01/06 05:45

やりたいこと

docker buildでビルドすると「no space left on device」とでてビルドできなくなるのを解決し、ビルドできるようにしたいです

( DockerのホストPC(?)のMacの方の容量は十分にあります)

環境

Docker for Macを使っています

sh

1$ docker --version 2Docker version 1.12.5, build 7392c3b

自分なりに考えられる原因

  • buildに生成される一時的なコンテナの容量不足

docker buildで生成される一時的なコンテナの容量を変更する方法を調べてもうまく見つけられませんでした)
そう思う理由:
docker buildされる過程でコンテナの使用容量は10GB以上になります。
Dockerfile内でビルドするあるライブラリの容量が10GB以上になってしまうので、どうしても容量を節約することができません。

ホストPC(Mac)のdf

追記(2017/01/06 14:44)

GBではなくTBあります

sh

1$ df -h 2Filesystem Size Used Avail Capacity iused ifree %iused Mounted on 3/dev/disk2 1.9Ti 698Gi 1.2Ti 36% 5455235 4289512044 0% / 4devfs 340Ki 340Ki 0Bi 100% 1176 0 100% /dev 5map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net 6map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home 7/dev/disk3s2 465Gi 31Gi 434Gi 7% 442806 4294524473 0% /Volumes/mac-env 8/dev/disk3s4 2.3Ti 1.8Ti 511Gi 79% 12253171 4282714108 0% /Volumes/Mac Backup

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

night1ynx

2017/01/06 05:42

念のため `df -h` の結果を貼り付けてもらえると、ホスト環境が関係ないことを示せていいと思います。
grovion

2017/01/06 05:45

ありがとうございます。追記しました
guest

回答3

0

公式のフォーラムに手順が載っていました。

https://forums.docker.com/t/increase-docker-container-disk-space-on-os-x/26725

以下の環境で確認しています。

  • OSX 10.12.4
  • Docker Community Edition Version 17.03.1-ce-mac5 (16048)

bash

1#=== 事前確認 ===# 2docker run --rm alpine df -h 3 4#=== リサイズ ===# 5rm ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 6cd ~/Library/Containers/com.docker.docker/Data/database/ 7git reset --hard 8echo 81920 > com.docker.driver.amd64-linux/disk/size # <- 81920MiB 9git add com.docker.driver.amd64-linux/disk/size && git commit -m "New target disk size: 81920MiB" 10 11 12#=== Docker再起動 ===# 13# OSXのDockerアプリからRestartする 14# うまくリスタート出来ない時は pkill com.docker.hyperkit でリスタートできるかも...? 15 16#=== リサイズの確認 ===# 17docker run --rm alpine df -h

ビルドを繰り返してできた不要な領域は以下で削除出来ると思います

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

以下のqemu-imageを使用した手順は、私の使用しているバージョンではうまく動作しませんでした。。

# リサイズ /Applications/Docker.app/Contents/MacOS/qemu-img create -f qcow2 /tmp/data.qcow2 40G mv /tmp/data.qcow2 /Applications/Docker.app/Contents/Resources/moby/data.qcow2 rm ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

投稿2017/04/21 16:23

evalphobia

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

公式フォーラムの情報によれば、~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 の容量が少なすぎるため、だそうです。

qemu-img resize を使って無理やり拡張している人もいますし、実際それくらいしか解決法が思い浮かばないのですが……。

No space left on device error - Docker for Mac - Docker Forums

投稿2017/01/06 06:06

night1ynx

総合スコア68

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grovion

2017/01/06 07:33 編集

ご回答ありがとうございます。有益なリンクの提供ありがとうございます。 リンク先のコマンド打ってみたところ、 ```sh ]$ ls -lah ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 -rw-r--r-- 1 redstone staff 64G 1 6 15:21 /Users/redstone/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 ``` `qemu-img`というコマンドは入ってないみたいなので、`qemu-img resize`は試しませんでした。
night1ynx

2017/01/06 06:28

qemu-img は `/Applications/Docker.app/Contents/MacOS/qemu-img` にあります。 64GBということはDocker.qcow2の上限のようですね。 `docker rmi` をするなどして掃除することでも解決するかもしれません。
grovion

2017/01/06 06:33

`/Applications/Docker.app/Contents/MacOS/qemu-img`にあったのですか! いま、ちょうど`brew install qemu`でインストールしたところでした。 `/Applications/Docker.app/Contents/MacOS/qemu-img`信頼できそうなので、こっちを使って見たかったですが、上限なんですね。
night1ynx

2017/01/06 06:37

いえ、上限というのはデフォルトの上限ということで、qemu-img を使うのはこのデフォルトの上限をさらに増やす作業です。
grovion

2017/01/06 06:44

> ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 の容量が少なすぎるため ではなくて、 質問に書いた、コンテナ内が容量超過している件は考えられませんか? なぜそう思うかというと、 docker build -t a-lib:3.9 ./a-library-ver3.9 が「no space left on device」したあとに、 以下のコマンドで別のバージョン用のDockerfileを連続して実行すれば、 docker build -t a-lib:3.8 ./a-library-ver3.8 docker build -t a-lib:3.7 ./a-library-ver3.7 docker build -t a-lib:3.6 ./a-library-ver3.6 (./a-library-verxxxディレクトリの中にDockerfileが入っているという想定です) はちゃんと`a-lib:3.8`も`a-lib-3.7`も`a-lib-3.6`正常にイメージを作成できます。 `docker images`で見れば、以下の容量であり、合計しても、a-lib-ver3.9を有に超えていると思われます。 3.8: 4.466 GB 3.7: 4.467 GB 3.6: 3.916 GB
grovion

2017/01/06 06:46

>> いえ、上限というのはデフォルトの上限ということで、qemu-img を使うのはこのデフォルトの上限をさらに増やす作業です。 ありがとうございます。危うく勘違いするところでした。`qemu-img resize`すればデフォルト上限を変更できるということですね
night1ynx

2017/01/06 06:56

Docker.qcow2 の容量が64GBより増えていく……というのであれば別の問題だと思います。 しかし、 > docker build -t a-lib:3.8 ./a-library-ver3.8 などが実行できるのは旧バージョンのイメージ(のキャッシュ)がすでに存在するためでは? dockerはすでに存在するイメージを使い回すので、いくつもインストールできることは傍証にはなりません。 `docker images -a` すればイメージサイズの合計に意味が無いことは分かると思います。
grovion

2017/01/06 07:10

>> dockerはすでに存在するイメージを使い回すので、いくつもインストールできることは傍証にはなりません。 ありがとうございます。確かにそうでした! Docker.qcow2に関してもう少し調べてみます
grovion

2017/01/06 07:33 編集

# qemu-img resize 思い切って+100GBしてみました。 ```sh $ /Applications/Docker.app/Contents/MacOS/qemu-img resize ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 +100G Image resized. ``` # qemu-img info 何度か+100GBしたり+10GBを試したので、 virtual sizeというのが増えました。 $ /Applications/Docker.app/Contents/MacOS/qemu-img info ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 image: /Users/redstone/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 file format: qcow2 virtual size: 484G (519691042816 bytes) disk size: 64G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true refcount bits: 16 corrupt: false しかしこれではの「no space」のエラーはでるので、disk sizeの変更などあたりを調べてみます
guest

0

自己解決

Teratailから回答を決めろという催促メールが来たので、
雑ですが、自己解決方法を記載させていただきます。

ただし、Docker for Macだけでは解決できませんでした。

大まかな手順

  1. VagrantでUbuntu 14.04の仮想環境を立ち上げる
  2. この仮想環境にapt install docker.ioでDockerをインストールする
  3. docker buildする

以上です。

手順の詳細

  1. VagrantでUbuntu 14.04の仮想環境を立ち上げる

ボックスの追加(参考:http://qiita.com/ra_armz/items/1ca31edf40767ba0d719)

sh

1vagrant box add Ubuntu14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-i386-vagrant-disk1.box

sh

1mkddir ubuntu-14 2cd ./ubuntu-14/ 3vagrant init 4# Vagrantfile を編集する(詳細は以下) #

VagrantFileの以下の部分がコメントアウトされていると思うので、
コメントアウトを取り除き、変更箇所の部分を変えます
docker buildするときにメモリを食うのでメモリを大きくしています(大きくしないと僕がビルドしたいライブラリのリンク時にエラーを起こして終了してしまいます))

  • Boxをubuntu14.04に指定
# Every Vagrant development environment requires a box. You can search for # boxes at https://atlas.hashicorp.com/search. config.vm.box = "ubuntu14.04"
  • メモリを20GBに
config.vm.provider "virtualbox" do |vb| # Display the VirtualBox GUI when booting the machine vb.gui = true # Customize the amount of memory on the VM: vb.memory = (20 * 1024).to_s # [変更箇所] メモリを20GBにした(vb.memory="20G"とかでもいいのかもしれないけど、Vagrantfileに詳しくないので分かりません) end

以上のVagrantfileの書き換えが終了したら、upしてsshです

sh

1vagrant up 2vagrant ssh
  1. この仮想環境にapt install docker.ioでDockerをインストールする

Dockerのインストールです

sh

1sudo apt update 2sudo apt install docker.io
  1. docker buildする

以下のコマンドでビルドしました。

sh

1sudo docker build .

以上です。

(どんなDockerfileをビルドしたかを載せていないので、これを見てくれた方が再現性のある検証ができないです)

この方法以外に試したこと

  • night1ynxさんに教えていただいたqemu-img resize(引数を適切に)

このコマンドを打ったあとにやることがありそうな感じですが、中断しました
virtual sizeだけが大きくなって、disk sizeが64GBのままなので、まだ、できることがあるのかなと思っています。(disk sizeが使用容量でvirtual sizeが最大容量なら、もうやることが思いつきません。)

virtual size: 484G (519691042816 bytes) disk size: 64G
  • docker daemon --storage-opt dm.basesize="20G"(これはコンテナの最大容量を20Gにしてくれるぽです(ただしDocker for Macではサポートしていないらしく、打つとエラーが返ります。VagrantのUbuntuの仮想環境で試すと、なぜか永遠に止まらなく,Ctrl+Cで終了させる感じです))

投稿2017/01/09 03:36

grovion

総合スコア145

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grovion

2017/01/09 03:38

「自己解決」ということにしましたが、Docker for Macだけで、このエラーを対処できていないですし、とりあえず`docker build`できたので、報告という形で満足はいっていません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問