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

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

ただいまの
回答率

90.33%

  • Docker

    808questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,301

grovion

score 135

 やりたいこと

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

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

 環境

Docker for Macを使っています

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

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

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

 ホストPC(Mac)のdf

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

GBではなくTBあります

$ df -h
Filesystem      Size   Used  Avail Capacity  iused      ifree %iused  Mounted on
/dev/disk2     1.9Ti  698Gi  1.2Ti    36%  5455235 4289512044    0%   /
devfs          340Ki  340Ki    0Bi   100%     1176          0  100%   /dev
map -hosts       0Bi    0Bi    0Bi   100%        0          0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%        0          0  100%   /home
/dev/disk3s2   465Gi   31Gi  434Gi     7%   442806 4294524473    0%   /Volumes/mac-env
/dev/disk3s4   2.3Ti  1.8Ti  511Gi    79% 12253171 4282714108    0%   /Volumes/Mac Backup
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • night1ynx

    2017/01/06 14:42

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

    キャンセル

  • grovion

    2017/01/06 14:45

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

    キャンセル

回答 3

+1

公式フォーラムの情報によれば、~/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 15:25 編集

    ご回答ありがとうございます。有益なリンクの提供ありがとうございます。

    リンク先のコマンド打ってみたところ、

    ```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`は試しませんでした。

    キャンセル

  • 2017/01/06 15:28

    qemu-img は `/Applications/Docker.app/Contents/MacOS/qemu-img` にあります。

    64GBということはDocker.qcow2の上限のようですね。
    `docker rmi` をするなどして掃除することでも解決するかもしれません。

    キャンセル

  • 2017/01/06 15:33

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

    キャンセル

  • 2017/01/06 15:37

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

    キャンセル

  • 2017/01/06 15: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

    キャンセル

  • 2017/01/06 15:46

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

    ありがとうございます。危うく勘違いするところでした。`qemu-img resize`すればデフォルト上限を変更できるということですね

    キャンセル

  • 2017/01/06 15:56

    Docker.qcow2 の容量が64GBより増えていく……というのであれば別の問題だと思います。

    しかし、
    > docker build -t a-lib:3.8 ./a-library-ver3.8
    などが実行できるのは旧バージョンのイメージ(のキャッシュ)がすでに存在するためでは?

    dockerはすでに存在するイメージを使い回すので、いくつもインストールできることは傍証にはなりません。
    `docker images -a` すればイメージサイズの合計に意味が無いことは分かると思います。

    キャンセル

  • 2017/01/06 16:10

    >> dockerはすでに存在するイメージを使い回すので、いくつもインストールできることは傍証にはなりません。

    ありがとうございます。確かにそうでした!

    Docker.qcow2に関してもう少し調べてみます

    キャンセル

  • 2017/01/06 16:32 編集

    # 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の変更などあたりを調べてみます

    キャンセル

+1

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

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)
#=== 事前確認 ===#
docker run --rm alpine df -h

#=== リサイズ ===#
rm ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
cd ~/Library/Containers/com.docker.docker/Data/database/
git reset --hard
echo 81920 > com.docker.driver.amd64-linux/disk/size  # <- 81920MiB
git add com.docker.driver.amd64-linux/disk/size && git commit -m "New target disk size: 81920MiB"


#=== Docker再起動 ===#
# OSXのDockerアプリからRestartする
# うまくリスタート出来ない時は pkill com.docker.hyperkit でリスタートできるかも...?

#=== リサイズの確認 ===#
docker 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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

check解決した方法

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)

vagrant box add Ubuntu14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-i386-vagrant-disk1.box
mkddir ubuntu-14
cd ./ubuntu-14/
vagrant init
# 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です

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

Dockerのインストールです

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

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

sudo 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 12:38

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

    キャンセル

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

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Docker

    808questions

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