2017-05-11 8 views
2

docker rmi <imgid> -fと私のマシン上のすべてのドッカー画像を誤って削除しましたが、幸いにもコンテナはそのまま残っていました。私はdocker commit 575985d354ef ubuntu_16_10:dsktopを使用して、コンテナからイメージを作成しようとすると、それはエラーを以下与える:削除されたドッカー画像、コンテナから新規作成する方法?

Error response from daemon: open /var/lib/docker/image/overlay2/imagedb/content/sha256/f31173ea77a68f70d897dba7623010a0471fa566a106c24a0e616278d37482e9: no such file or directory

現在のコンテナから新しいイメージを作成する方法は?

+0

あなたのコマンドは正しいです。それはあなたが何かを壊しているようだ – Robert

+0

あなたのコンテナからデータを回復しようとしている、または実際に新しい画像を作成しようとしていますか?前者が可能かもしれない。あなたの目標が何であるか教えてください – Rawkode

+0

私はこのコンテナから新鮮なイメージを作成したい、それ以外のものはすべて**(コンテナが作成されたプライベートローカルリポジトリ**のドッカーイメージ)が削除されているので、このエラー – SACn

答えて

2

あなたは、実行中のコンテナで使用される画像を削除できないようにする必要があり:

$ docker run --name nginx-test -d nginx 
351eb0e3a96b4375176358581a0afb460f57775382928860af764eb9d5e33b25 

$ docker image rm nginx 
Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container 351eb0e3a96b is using its referenced image 5e69fe4b3c31 

ですから、画像を削除するために管理した場合にドッキングウィンドウはレイヤードファイルシステムを使用するので、あなたは、コンテナが壊れましたコンテナのRWレイヤーの下のイメージレイヤーを再利用します。これは、画像レイヤーが各コンテナにコピーされないという技術的な方法です。

イメージを再構築する必要があります。今度は、コンテナを手作業で作成し、結果をコミットするのではなく、Dockerfileを使用することを検討するのが良い時期です。

+1

あなたは正しいですが、私はいくつかのハックや解決策を探しています。コンテナが更新された場所からベースイメージにアクセスできますが、コマンドは使用されません。 – SACn

+0

イメージを削除すると、データは消えます。人々がDockerfilesを使用する理由は、この問題を避けて、イメージの再構築を容易にすることです。 – BMitch

関連する問題