次のようにして、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
どうすればメモリを増やすことができますか?システム構成はどこに保管されていますか?
カルの提案から:
私がすべてのイメージとコンテナを取り除くとき、それはいくらかのスペースを空けました、そして、イメージ構築は同じエラーで失敗する前に長く走りました。それで、問題は、これがどのスペースを参照しているか、そしてどのようにそれを設定するのですか?
私は同じエラーがあったし、このようにそれを解決します:
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}
_アップデート_
以下のコマンドは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つずつ削除できます。
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オプションで指定したディレクトリにたくさんのファイルが作成されるはずです。
それが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
は簡単だということです。
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")
これにより、終了してぶら下がっているイメージが削除されます。これにより、デバイススペースが消去されます。
docker rmi $(docker images -f "dangling=true" -q)
あなたも使用することができます:
docker system Prune
またはボリュームだけの場合:
docker volume Prune
次のコマンドを使用してDockerをクリーンにします。
docker images --no-trunc | grep '<none>' | awk '{ print $3 }' \
| xargs docker rmi
未使用のコンテナ、ボリューム、ネットワーク、およびイメージを一度にすべて削除する( 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イメージのインストールディレクトリを変更するには? を参照)。
あなたのcgroupsはcpuset
コントローラが有効になっています。このコントローラはあなたのタスクがどのCPU /メモリバンクを実行することを許可されているかをきめ細かく指定することを可能にするNUMA環境で主に役に立ちます。
デフォルトでは必須のcpuset.mems
とcpuset.cpus
は設定されていません。これはあなたのタスクに "スペースが残っていない"ことを意味します。
これを修正する最も簡単な方法は、ルートcgroupでcgroup.clone_children
を1に有効にすることです。あなたの場合は、
echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children
これは基本的に、コンテナのcpuset.mems
とcpuset.cpus
をそれらの親cgroupから自動的に初期化するようにシステムに指示します。
私の場合、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
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
これが発生する可能性があるいくつかの方法があるようです。私が持っていた問題はdockerディスクイメージがその最大サイズに達したということでした(あなたがOSXにあるどんなサイズを見たいならDocker Whale - > Preferences - > Disk)。
私は限界を上げて行ってよかったです。未使用の画像をクリーンアップすることでもうまくいくはずです。
すでに述べたように、
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
RHELマシンでもこの問題が発生しました。私はスタックオーバーフローやdocker-hubコミュニティのどこにも適切な解決策を見つけられませんでした。以下のコマンドを実行してもこの問題に直面している場合
ドッカーシステムPrune --all
ついに解決した解決策: