Docker を使用するプロセスでは、異なるマシン間で Docker イメージとコンテナーを共有する必要がある場合があります。簡単な方法は、これらのイメージとコンテナを tar ファイルにパッケージ化し、ネットワーク経由でターゲット マシンに転送し、解凍して Docker にロードすることです。ただし、これらのイメージとコンテナをターゲット マシンに正常に転送したとしても、イメージをロードしたりコンテナを起動したりできず、「デバイスに空き領域がありません」というメッセージが表示される、つまりパーティションのディスク領域が不足するという問題が発生することがよくあります。特に次の場合に不十分です。 この問題は、ストレージ ドライバー オーバーレイ 2 を使用するときに発生する可能性が高くなります。
いったい何が起こっているのでしょうか?私もかつて同様の問題に遭遇しましたが、調査と研究を行った結果、その理由と解決策が見つかりました:
Docker ストレージ ドライバーには以下が含まれます。 AUFS、DeviceMapper、および OverlayFS のうち、Docker がハードディスクの共有に失敗するとどうなりますか? がより一般的です。これは overlayFS ファイル システムに基づいており、次の図に示すように、複数のミラーリングされたファイル システムを重ね合わせて共同マウント ポイントを形成し、完全なファイル システムのように見えます。
図に示すように、青色の部分が基本イメージのファイル システム、緑色の部分がコンテナ層のファイル システム、赤色の部分が読み取り専用層のファイル システムです。読み取り専用レイヤーには、すべてのイメージに共通のファイル システムが含まれています。コンテナ レイヤーは、各コンテナのファイル システムです。コンテナごとに読み取り専用レイヤーを作成し、その上に書き込み可能なレイヤーを追加して、各コンテナが参照できるようにします。独立したファイル システムであり、相互に干渉しません。 パーティション容量不足の原因上記の問題に対応して、いくつかの解決策を提供しました:
3.2 /var/lib/docker ディレクトリをより大きなデータディスクにマウントします
事前に 21GB を超えるディスク (20T など) を用意し、ext4 形式にフォーマットしてマウントします/data ディレクトリ上で、/var/lib/docker ディレクトリをストレージ用のデータ ディスクに移行します。具体的な操作手順は次のとおりです。
# 制作文件系统格式 mkfs.ext4 /dev/vdb # 挂载 mount /dev/vdb /data # 备份原/var/lib/docker目录下所有数据 cp -au /var/lib/docker/* /data/ # 卸载/var/lib/docker目录 umount /var/lib/docker # 将/var/lib/docker目录迁移到新的数据盘中 echo '/dev/vdb /var/lib/docker ext4 defaults 0 0' >> /etc/fstab mount -a
3.3 使用されなくなった Docker イメージとコンテナを削除します
次のコマンドを使用して、ディスク領域をクリーンアップできます:
# 清理所有停止的容器 docker container prune # 清理所有未被标记的镜像 docker image prune -a # 删除所有没有容器使用的镜像 docker image prune -a --filter "dangling=true"
まとめ
Dockerを使用する際には、ストレージドライバーが使用する容量が十分であるかどうかに常に注意する必要があり、十分でないと起動に失敗する可能性があります。これを行うには、上記の 3 つの解決策のいずれかを実行できますが、個人的には、元のファイル システムを破壊せずに問題を迅速に解決できる 2 番目の方法をお勧めします。私の共有があなたのお役に立てば幸いです。読んでいただきありがとうございます。以上がDocker がハードディスクの共有に失敗するとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。