無效鏡像問題image has dependent child images

因爲新舊鏡像同名,舊鏡像名稱被取消,從而出現倉庫名、標籤均爲的鏡像。這類無標籤鏡像也被稱爲虛懸鏡像(dangling image) 。html

# docker image ls -f dangling=trueREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE<none>              <none>              00285df0df87        5 days ago          342 MB

通常來講,虛懸鏡像已經失去了存在的價值,是能夠隨意刪除的,能夠用下面的命令刪除。nginx

# docker image prune


爲了加速鏡像構建、重複利用資源,Docker會利用中間層鏡像。因此在使用一段時間後,可能會看到一些依賴的中間層鏡像。docker

這些中間層鏡像是其它鏡像所依賴的鏡像,中間層鏡像不該該刪除,不然會致使上層鏡像由於依賴丟失而出錯。實際上,這些鏡像也不必刪除,由於相同的層只會存一遍,而這些鏡像是別的鏡像的依賴,所以並不會由於它們被列出來而多存一份,不管如何你也會須要它們。只要刪除那些依賴它們的鏡像後,這些依賴的中間層鏡像也會被連帶刪除。centos

若是實在想刪除這些中間層鏡像且不想影響依賴它們的鏡像,能夠按照下面這麼作。ide

# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jenkins             latest              369817e36fc5        22 hours ago        1.24GB
nginx               latest              8b0a86bf5764        24 hours ago        418MB
centos              latest              0f3e07c0138f        2 weeks ago         220MB# docker images -aREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE<none>              <none>              64494614f22b        22 hours ago        1.24GB<none>              <none>              7ac19a9cd510        22 hours ago        1.24GB<none>              <none>              fc2251321ab5        22 hours ago        1.24GB<none>              <none>              63d2cbb95230        22 hours ago        1.24GB
jenkins             latest              369817e36fc5        22 hours ago        1.24GB<none>              <none>              6ed44c1bb8da        22 hours ago        1.24GB<none>              <none>              caff29bcf1e2        22 hours ago        1.24GB<none>              <none>              4e84b30eda89        22 hours ago        694MB<none>              <none>              47aa632b5427        22 hours ago        616MB<none>              <none>              de63e9ae754a        24 hours ago        418MB
nginx               latest              8b0a86bf5764        24 hours ago        418MB<none>              <none>              bdb2c14e7f0b        24 hours ago        418MB<none>              <none>              ca8b12c4da26        24 hours ago        418MB<none>              <none>              4a69b2a70168        24 hours ago        418MB<none>              <none>              a5d099eb709f        45 hours ago        220MB
centos              latest              0f3e07c0138f        2 weeks ago         220MB

除了有效的三個鏡像外,其他所有都是中間層鏡像。3d

# docker rmi 63d2cbb95230Error response from daemon: conflict: unable to delete 63d2cbb95230 (cannot be forced) - image has dependent child images# docker rmi -f 63d2cbb95230Error response from daemon: conflict: unable to delete 63d2cbb95230 (cannot be forced) - image has dependent child images# docker rmi -f a5d099eb709fError response from daemon: conflict: unable to delete a5d099eb709f (cannot be forced) - image has dependent child images# docker rmi -f 64494614f22bError response from daemon: conflict: unable to delete 64494614f22b (cannot be forced) - image has dependent child images

即便加上-f參數也沒法刪除,這是由於這些中間層鏡像有依賴它們的鏡像,也就是jenkins:latestnginx:latestcode

# docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=fc)[jenkins:latest] sha256:369817e36fc5250dcc15b320dae5fde9da2caa0d28262458f98d96550b6ccb6b sha256:7ac19a9cd5108d532d4f8e29289cd3bd61721a9c52f4a5ad9271a4aa372a6505# docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=4e)[jenkins:latest] sha256:369817e36fc5250dcc15b320dae5fde9da2caa0d28262458f98d96550b6ccb6b sha256:7ac19a9cd5108d532d4f8e29289cd3bd61721a9c52f4a5ad9271a4aa372a6505# docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=47)[jenkins:latest] sha256:369817e36fc5250dcc15b320dae5fde9da2caa0d28262458f98d96550b6ccb6b sha256:7ac19a9cd5108d532d4f8e29289cd3bd61721a9c52f4a5ad9271a4aa372a6505

slice=後面跟中間層鏡像的id能夠查看哪些鏡像依賴於這些中間層鏡像。orm

# docker save -o /docker/jenkins.tar jenkins:latest# docker save -o /docker/nginx.tar nginx:latest# ls /dockerjenkins.tar  nginx.tar# docker rmi jenkins:latest# docker rmi nginx:latest# docker images -aREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              0f3e07c0138f        2 weeks ago         220MB

能夠看到,在刪除依賴於中間層鏡像的鏡像時,中間層鏡像也被跟着刪除了。接着導入原來依賴於中間層鏡像的鏡像便可。htm

# docker load < /docker/jenkins.tar fa0b0907a72e: Loading layer [==================================================>]  397.8MB/397.8MB
24878c480cae: Loading layer [==================================================>]  78.25MB/78.25MB
156c821fe3b0: Loading layer [==================================================>]    553MB/553MB
Loaded image: jenkins:latest# docker load < /docker/nginx.tar b21caef323db: Loading layer [==================================================>]  208.8MB/208.8MB
4d1228e0ab7c: Loading layer [==================================================>]  5.632kB/5.632kB
Loaded image: nginx:latest# docker images -aREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jenkins             latest              369817e36fc5        22 hours ago        1.24GB
nginx               latest              8b0a86bf5764        24 hours ago        418MB
centos              latest              0f3e07c0138f        2 weeks ago         220MB
相關文章
相關標籤/搜索