web-dev-qa-db-ja.com

Dockerエラー:端末に空きがありません

次のようにして、dockerを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

その後、私が最初にImageを作成しようとしたとき、それは以下のエラーで失敗しました

 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"

これがdockerの情報です

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

どうすればメモリを増やすことができますか?システム構成はどこに保管されていますか?

カルの提案から:

私がすべてのイメージとコンテナを取り除くとき、それはいくらかのスペースを空けました、そして、イメージ構築は同じエラーで失敗する前に長く走りました。それで、問題は、これがどのスペースを参照しているか、そしてどのようにそれを設定するのですか?

221
user_mda

私は同じエラーがあったし、このようにそれを解決します:

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>イメージを取り除きます(これらはイメージの構築中に生成されることがあり、何らかの理由でイメージの構築が中断された場合はそこに残ります)。

これは私がそれらを削除するために使用するNiceスクリプトです。

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

その後、Docker Composeを使用して各プロジェクトのローカルでイメージを構築します。通常は自分のフォルダのように名前が付けられた多数の画像が表示されます(たとえば、プロジェクトフォルダがHelloの場合、画像名はHello_blablablaになります)。そのため、これらすべての画像を削除することも検討してください。

上記のスクリプトを編集して削除するか、手動で削除することができます。

docker rmi {image-name}

258
Mahmoud Zalt

_アップデート_
以下のコマンドはDockerがより発展するにつれてハッキングされました。現在のベストプラクティスは

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を使って一度に1つずつ削除できます。

191
Joshua Cook

Dockerがデフォルトでイメージファイルを保存する場所(/ var/lib/docker)にあるため、/ varに空き容量があることを確認します。

最初にdocker ps -aを使ってすべてのコンテナをリストし(停止したものも含む)、docker rmを使ってそれらを取り除きます。それからdocker imagesを使って保存したすべての画像を一覧表示し、docker rmiを使ってそれらを削除します。

次に、dockerデーモンの-gオプションを使用するか、/etc/default/dockerを編集して-gオプションをDOCKER_OPTSに追加して、格納場所を変更します。 -gは「Dockerランタイム」の場所を指定します。これは基本的に、Dockerがイメージを構築したりコンテナーを実行したりするときに作成されるものすべてです。使用されるディスクスペースは時間の経過とともに大きくなる傾向があるため、十分なスペースのある場所を選択してください。 /etc/default/dockerを編集した場合は、変更を有効にするためにdockerデーモンを再起動する必要があります。

これで、新しいイメージを作成(またはDocker Hubからイメージを取得)できるようになり、-gオプションで指定したディレクトリにたくさんのファイルが作成されるはずです。

65
Kal

それが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

繰り返しになりますが、Dockerを開発するときには、私のec2インスタンスでこれを使用しています。深刻な品質保証やプロダクションパスでは使用していません。素晴らしいことは、あなたがあなたのDockerfileを持っているのであれば、再構築やdocker pullは簡単だということです。

28
James

Dockerはぶら下がっているイメージを残しているため、スペースを占有する可能性があります。 Docker後にクリーンアップするには、以下を実行します。

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")

これにより、終了してぶら下がっているイメージが削除されます。これにより、デバイススペースが消去されます。

13
punkrockpolly
  1. ぶら下がった画像をきれいにするdocker rmi $(docker images -f "dangling=true" -q)
  2. 不要なボリュームを削除する
  3. 未使用の画像を削除
  4. 未使用の容器を取り除く
9
josepainumkal

あなたも使用することができます:

docker system Prune

またはボリュームだけの場合:

docker volume Prune
6
alexanoid

次のコマンドを使用してDockerをクリーンにします。

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

未使用のコンテナ、ボリューム、ネットワーク、およびイメージを一度にすべて削除する( https://docs.docker.com/engine/reference/commandline/system_Prune/#related-commands ):

docker system Prune -a -f

十分でない場合は、まず実行中のコンテナを削除することができます。

docker rm -f $(docker ps -a -q)
docker system Prune -a -f

/ var/lib/dockerを増やすか、より広いスペースを持つ別の場所を使用することも、このエラーを回避するための良い方法です( dockerイメージのインストールディレクトリを変更するには? を参照)。

6
Guillaume

あなたのcgroupsはcpusetコントローラが有効になっています。このコントローラはあなたのタスクがどのCPU /メモリバンクを実行することを許可されているかをきめ細かく指定することを可能にするNUMA環境で主に役に立ちます。

デフォルトでは必須のcpuset.memscpuset.cpusは設定されていません。これはあなたのタスクに "スペースが残っていない"ことを意味します。

これを修正する最も簡単な方法は、ルートcgroupでcgroup.clone_childrenを1に有効にすることです。あなたの場合は、

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

これは基本的に、コンテナのcpuset.memscpuset.cpusをそれらの親cgroupから自動的に初期化するようにシステムに指示します。

5
yadutaf

私の場合、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
2
Kostyantyn

Docker Toolkit経由でboot2dockerイメージを使用している場合、問題はboot2docker仮想マシンのスペースが不足しているという事実から生じます。

あなたがdocker importをするか、新しい画像を追加するとき、その画像はいっぱいになったかもしれない/mnt/sda1にコピーされます。

イメージ内の空き容量を確認する1つの方法は、vmにsshを入れてdf -hを実行し、/ mnt/sda1の残りの容量を確認することです。

Sshコマンドはdocker-machine ssh defaultです。

それが本当にスペースの問題であると確信したら、この質問の答えのいくつかの指示に従ってクリーンアップするか、/mnt/sda1のスペースを増やすことによってboot2dockerイメージ自体のサイズを変更することを選択できます。

画像のサイズを変更するには、こちらの手順に従ってください。 https://Gist.github.com/joost/a7cfa7b741d9d39c1307

1
Nerrve

これが発生する可能性があるいくつかの方法があるようです。私が持っていた問題はdockerディスクイメージがその最大サイズに達したということでした(あなたがOSXにあるどんなサイズを見たいならDocker Whale - > Preferences - > Disk)。

私は限界を上げて行ってよかったです。未使用の画像をクリーンアップすることでもうまくいくはずです。

1
SnellyBigoda

すでに述べたように、

docker system Prune

しかし、Docker 17.06.0以前では、未使用のボリュームをプルーニングする必要はありません。 Docker 17.06.1以降、次のコマンドもボリュームを整理します。

docker system Prune --volumes

Dockerのドキュメントから: https://docs.docker.com/config/pruning/

Docker system Pruneコマンドは、画像、コンテナ、およびネットワークを整理するショートカットです。 Docker 17.06.0以前では、ボリュームも整理されています。 Docker 17.06.1以降では、dockerシステムのPruneからPruneボリュームに--volumesフラグを指定する必要があります。

ボリュームを整理してイメージとコンテナーを保持したい場合は、次のようにします。

docker volume Prune
0
RoBeaToZ

RHELマシンでもこの問題が発生しました。私はスタックオーバーフローやdocker-hubコミュニティのどこにも適切な解決策を見つけられませんでした。以下のコマンドを実行してもこの問題に直面している場合

ドッカーシステムPrune --all

ついに解決した解決策:

  1. 港湾労働者情報
    • 現在のdockerストレージドライバを確認する
    • 私のものでした:Storage Driver:devicemapper; overlay2としてストレージドライバがあるのであれば心配する必要はありません。解決策はまだあなたのために働くでしょう。
  2. df -h
    • これはmachine上の利用可能なファイルシステムとそれらがマウントされているパスをチェックするためです。メモがある2つのマウントされたパス:
    • / dev/mapper/rootvg-var 7.6G 1.2G 6.1G 16% /var
    • / dev/mapper/rootvg-apps 60G 9.2G 48G 17% /apps
    • - デフォルトのdocker格納パスは/ var/lib/dockerです。それは6 GBまで利用可能なスペースを持っています、そしてそれ故にすべてのスペース関連の問題。だから基本的に、私はデフォルトの記憶域を利用可能なスペースがもっとある他の記憶域に移動しなければなりません。私にとっては、/ appsにマウントされているファイルシステムパス '/ dev/mapper/rootvg-apps'。今の仕事は/ var/lib/dockerを/ apps/newdocker/dockerのようなものに移動することです。
  3. mkdir/apps/newdocker/docker
  4. chmod -R 777/apps/newdocker/docker
  5. /usr/lib/systemd/system[.____。にあるlinux上のdocker.seriveファイルを更新します。
    • vi /usr/lib/systemd/system/docker.service
  6. ストレージデバイスがdevicemapperの場合、既存のExecStart行をコメントアウトして[Service]の下に以下を追加します。
    • ExecStart =
    • ExecStart =/usr/bin/dockerd -sデバイスマッパー--storage-opt dm.fs = xfs --storage-opt dm.basesize = 40GB -g/apps/newdocker/docker --exec-opt native.cgroupdriver = cgroupfs
  7. または記憶装置がoverlay2の場合:
    • 既存のExexStartステートメントに-g/apps/newdocker/dockerを追加するだけです。
    • ExecStart =/usr/bin/dockerd -g/apps/newdocker/docker -H fdのようなもの:// --containerd =/run/containerd/containerd.sock
  8. rm -rf/var/lib/docker(既存のdockerデータをすべて削除します)
  9. systemctl stop docker
  10. ps aux grep -iドッカーgrep -v grep
    • 上記のコマンドで何も出力されない場合は、下記のコマンドでsystemdデーモンをリロードしてください。
  11. systemctlデーモン - リロード
  12. systemctlスタートドッカー
  13. 港湾労働者情報
    • 利用可能なデータスペースをチェックしてください:新しいファイルシステムへのdockerに移動した後62.15GB。
  14. 完了
0