Docker镜像损坏?删除图层?

时间:2017-03-23 11:34:53

标签: docker containers

系统重启后,看起来现有的docker镜头已损坏。

我尝试了以下内容 -

  1. 在该机器内重建一个泊坞窗 - 这很有效。这张图片运行正常。
  2. 我拉了一张已经存在的图片,它说层已经存在了。但是这张图片似乎仍然被破坏了。
  3. 我觉得删除图片会有所帮助。当我尝试删除时,它似乎只删除标记。它不会删除所有图层。我怎么能这样做?

    我试过了docker rmi。图像被删除了。

    现在,我尝试再次拉动图像,其中一些图层已经存在。我试图运行码头工具,它说oci runtime error ..... file not found

    这些图像正在其他机器上运行,并且正在使用这台机器直到几个小时之前。

5 个答案:

答案 0 :(得分:7)

  1. 停止泊坞服务
  2. 删除/ var / lib / docker
  3. 启动泊坞窗服务

答案 1 :(得分:2)

只需使用docker images -a选项即可了解所有带图层的图片。要了解特定图片的特定图层,您可以使用docker history $image_name

此外,还有一个选项可以删除可以删除它的悬空图像。

docker rmi $(docker images -f dangling=true -q)

悬空图片:

Docker镜像由多个图层组成。悬空图像是与任何标记图像无关的图层。它们不再用于目的并占用磁盘空间。可以通过向docker images命令添加值为-f的过滤器标记dangling=true来定位它们。如果您确定要删除它们,可以添加-q标记,然后将其ID传递给docker rmi:

希望这会对你有所帮助。谢谢!

答案 2 :(得分:0)

Docker rmi应该从您的计算机中删除所有图像层。您可以尝试强制执行:

docker rmi --force [IMAGE]

答案 3 :(得分:0)

只是有完全相同的问题(在我的情况下,node:latest)

遇到相同问题后,这就是我所做的事情:

        {
            string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
            ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
            OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result;
            TokenValidationParameters validationParameters = new TokenValidationParameters
            {
                ValidateAudience = false,
                ValidateIssuer = false,
                IssuerSigningKeys = config.SigningKeys, //.net core calls it "IssuerSigningKeys" and "SigningKeys"
                ValidateLifetime = true
            };
            JwtSecurityTokenHandler tokendHandler = new JwtSecurityTokenHandler();
            SecurityToken jwt;
            var result = tokendHandler.ValidateToken(token, validationParameters, out jwt);
            return jwt as JwtSecurityToken;
        }

^^这就是我们所坚持的

但是事实证明,当docker映像尝试构建时,会有一个残留映像:

[root@container1 docker]# docker rmi -f node:latest
Untagged: node:latest
Untagged: node@sha256:908e8182394cb5672465780ed45512d9b78dccd10d674e84158ea65b40bba755
[root@container1 docker]# docker pull node:latest
latest: Pulling from library/node
Digest: sha256:908e8182394cb5672465780ed45512d9b78dccd10d674e84158ea65b40bba755
Status: Downloaded newer image for node:latest

因此删除该边缘容器:

[root@container1 containers]# docker ps -a
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS                           PORTS               NAMES
a3af68deafbd        4c144cb53d02                           "/bin/sh -c 'sed -i …"   5 minutes ago       Created                                              flamboyant_keller

然后删除有效图像

[root@container1 containers]# docker rm a3af68deafbd
a3af68deafbd

然后去

答案 4 :(得分:0)

如果您可能想要擦除所有图像和容器,则可以执行此操作。

停止并删除所有容器(是否在运行):

docker rm $(docker stop $(docker ps -aq)) 

另外,使用system prune command

docker system prune --volume --all 

删除:

  • 所有停止的容器
  • 至少一个容器未使用的所有网络
  • 至少一个容器未使用的所有卷
  • 所有没有至少与之关联的容器的图像
  • 所有构建缓存

要跳过确认对话框,请添加-f标志。

自从头开始重新启动后,它应该可以解决损坏的图层问题。