【问题标题】:Docker ERROR: Error processing tar file(exit status 1): unexpected EOFDocker 错误:处理 tar 文件时出错(退出状态 1):意外 EOF
【发布时间】:2017-03-14 11:11:03
【问题描述】:

我需要空间并执行:docker rmi $(docker images -f "dangling=true" -q)

从那以后我不能使用 docker-compose:docker-compose build,我收到错误:ERROR: Error processing tar file(exit status 1): unexpected EOF

我试图删除所有图像,重新安装 docker,但没有任何反应:一段时间后总是出现同样的错误。

我在另一个系统上构建并且它可以工作,这表明这是一个错误状态问题。

知道我应该清理什么吗?

使用:

▶ docker version
Client:
 Version:      17.03.0-ce
 API version:  1.24 (downgraded from 1.26)
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 08:01:32 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.6
 API version:  1.24 (minimum version )
 Go version:   go1.6.2
 Git commit:   78d1802
 Built:        Tue Jan 31 23:35:14 2017
 OS/Arch:      linux/amd64
 Experimental: false

▶ docker-compose version
docker-compose version 1.11.2, build dfed245
docker-py version: 2.1.0
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

【问题讨论】:

  • 您是否尝试过在重新安装之前完全删除/var/lib/docker 目录?注意:这将删除所有卷、容器、图像...确保先备份它。
  • 当我的构建目录包含几个千兆字节的核心转储文件时,我遇到了这个问题。我试过删除 docker 目录但没有成功,但只需删除 core 文件即可解决问题。

标签: docker docker-compose


【解决方案1】:

我遇到了同样的问题,但批准的答案对我不起作用。

原来我有一个文件,它不允许运行 docker-compose 的用户读取它。删除文件后一切正常

【讨论】:

  • 那是什么文件?
  • @dondublon 没关系。取决于你在 docker 试图构建的文件中拥有什么。只需 chown -R 您的项目文件夹给它应该拥有的用户。就我而言,我的一个容器编写了一个文件,该文件是 root 拥有的,并且除了所有者之外的任何人都没有读取权限
  • 当我在寻找答案时,我忽略了你的答案,因为我认为我的情况与权限无关。我错了。在一个文件夹中,我有一个标记为“崩溃数据”的文件。该文件可能是由 docker 容器生成的,它没有访问权限。所以大家不要重复我的错误,仔细检查你所有的项目文件夹。
  • 这就是我的答案。之前的 docker run 在项目文件夹中留下了 root 拥有的 bash_history 文件。
  • 我还将容器内的一个文件写入了一个挂载的主机卷,该卷恰好与撰写资源位于同一目录中。 chown -R $USER 修复了它。
【解决方案2】:

有一个内置命令可以删除未使用的图像(版本 1.13+):

docker image prune

现在处理这种情况:

  • 停止 Docker 服务

    systemctl stop docker
    
  • 备份/var/lib/docker然后:

  • 删除/var/lib/docker 注意:这将删除图像、容器、卷……请确保先备份它。

    rm -rf /var/lib/docker
    
  • 启动 Docker 服务

    systemctl start docker  
    

更新:

如另一个答案中所述,在某些情况下,它可能是文件权限问题。请查看权限。

【讨论】:

  • 你很好! :) 备份它对我有什么帮助,因为无论如何我都必须重建,对吧?没关系,因为它是我的开发机器。
  • 通常人们有很多镜像和容器,几天后他们记得数据丢失了,所以我总是鼓励备份。
  • 明白了。但是如果我想恢复我的图像,我只需要恢复/var/lib/docker/image,它就可以开箱即用了吗?
  • 做了所有这些但没有帮助。问题是根据其他答案的权限。
  • 我的案例是文件权限
【解决方案3】:

对我来说,这是一个权限错误。 我遇到了与 PR 完全相同的问题, ERROR: Error processing tar file(exit status 1): unexpected EOF 我的解决方案很脏,但对我有用

chown -R 777 /foo/bar/project

您几乎总是希望避免在 777 上设置权限,655 更合理。

0 = ---
1 = --x
2 = -w-
3 = -wx
4 = r-
5 = r-x
6 = rw-
7 = rwx

更详细的解释可以在这里找到: https://www.pluralsight.com/blog/it-ops/linux-file-permissions

【讨论】:

    【解决方案4】:

    彻底解决这个错误

    docker build 需要读取上下文目录树中的每个文件。为避免权限问题,请将所有已安装目录添加到 .dockerignore 文件中,构建期间使用的目录除外。例如,对于这个docker-compose 文件:

    version: '3'
    services:
        myservice:
            build: .
        volumes:
            - './etc:/etc/myservice'
            - './log:/var/log/myservice'
    

    添加包含此内容的.dockerignore 文件:

    /etc
    /log
    

    无论挂载目录中文件的权限如何,问题都会消失。

    如何获得更多信息的错误

    docker-compose 错误信息不是很丰富,因此您可以尝试在每次构建时运行 docker 以获取详细信息:

    $ docker build .
    

    你会得到这样的错误:

    error checking context: 'no permission to read from '/home/david/docker/myservice/log/2020161.log'.
    

    【讨论】:

      【解决方案5】:

      可能有几个不同的问题。您可以通过检查 docker build 抛出的问题来找出问题。

      问题是 docker-compose build 会隐藏问题的信息。找出问题所在

      不要使用:

      docker-compose build XXX
      

      相反,打开你的 docker-compose.yml,发现服务的 build: 标签给你一个问题,例如

      services:
         yourservice: 
             build: yourservice-directory/
      

      然后运行:

      docker build yourservice-directory
      

      在此之后,您将看到问题所在。

      【讨论】:

      • 我做了docker build --file <dockerfile> . 并得到了这个错误:error checking context: 'no permission to read from '/<my repo>/core.19168''.。我删除了这些文件,它工作!谢谢!
      【解决方案6】:

      对我来说,问题是 Docker Pull 挂起,所以我 CTRL+C 退出并再次尝试。相同的错误信息。

      最后我在这个目录中找到了一些root拥有的文件。给文件适当的权限解决了这个问题。

      chown -R <username>:<group> /var/lib/docker/tmp

      • MAC Docker 版本 17.12.0-ce,构建 c97c6d6

      【讨论】:

      • 考虑sudo chown :docker -R /var/lib/docker/tmp
      【解决方案7】:

      如果您尝试查看权限、docker reset、docker system prune、删除所有容器、删除所有图像(悬空或其他)、阅读有关此问题的所有内容但均未成功。尝试卸载 docker 并重新安装稳定版。

      虽然,我遇到的错误是:Error processing tar file(exit status 1): mkdir /some/path/name: no such file or directory

      【讨论】:

      • 我做了上述所有解决方案,但对我没有任何效果,最后我尝试升级 docker 包,它对我有用。
      【解决方案8】:

      就我而言,问题是由我的项目脚本之一创建的 .dump 文件。

      docker-compose 将上下文作为 tar 文件传递​​给引擎,因此,build 命令将 tar(.dump 文件)打包到另一个 tar 文件(docker 上下文)中,因此在上下文。

      因为我不需要容器中的 .dump 文件,所以我将它添加到我的 .dockerignore 文件中。

      【讨论】:

        【解决方案9】:

        参考: https://medium.com/the-code-review/clean-out-your-docker-images-containers-and-volumes-with-single-commands-b8e38253c271

        1。清理系统上的容器、映像、卷和网络:
        docker system prune --all --force --volumes
        2. docker-compose up

        【讨论】:

          【解决方案10】:

          我在 python 项目 中更改 Dockerfile 位置时遇到了同样的问题。我尝试了接受的答案,但对我不起作用。

          我通过运行解决了这个问题:

          find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs sudo rm -r
          

          在项目根目录上。

          问题是 docker-compose build 试图读取 pycache 文件夹中的文件。

          也许这也可以通过正确使用 .dockerignore 来解决,但我不想尝试

          希望这会有所帮助。

          感谢。

          【讨论】:

            【解决方案11】:

            尝试增加 Docker 的内存,它解决了我的问题。

            首选项中的 Docker 内存设置被设置为 2GB,所以当拉动 ~3GB 图像时,我得到了这个错误:

            $ docker pull skymindops/skil-ce
            latest: Pulling from skymindops/skil-ce
            118c5f2883d6: Pull complete 
            3d199b2e6224: Extracting [==================================================>]  2.902GB/2.902GB
            failed to register layer: Error processing tar file(exit status 1): unexpected EOF
            

            增加内存限制修复了它(我也增加了交换,但不确定它是否需要)。

            【讨论】:

            • 我的问题与提出的问题完全无关,但是您如何指定 docker 的内存限制?您提到Docker memory setting in Preferences was set to 2GB 您在哪里指定了首选项?我实际上想为 docker 守护进程设置内存限制。
            【解决方案12】:

            我尝试了一切,从重新启动、重新安装 Docker 和清除 /var/lib/docker

            我的原因是在我的项目中破坏了构建上下文。在我运行git clean 将项目目录重置回其原始状态后,我能够docker-compose

            在项目的根目录中运行git clean -iXd 以交互方式git clean

            编辑:过了一会儿,它又发生了。这一次,git clean 没有修复它。我很确定它只发生在 Ubuntu 上。我的主要同事从未遇到过。

            【讨论】:

              【解决方案13】:

              我找到了一个临时解决方案:

              1. 确保在docker-compose.yml 上指定图像名称 例如,指定镜像名称和容器名称为 django_practice_db/django_practice_web

                services:
                  django_practice_db:
                    image: postgres
                    container_name: django_practice_db
                  django_practice_web:
                    container_name: django_practice_web
                    build: .
                    command: pipenv run python manage.py runserver 0.0.0.0:8000
                
              2. 将项目文件复制到另一个地方

              3. 进入复制的项目目录

              4. 执行docker-compose build

              5. 回到原来的项目目录

              6. 执行docker-compose up

              不知道为什么我在更改文件夹路径时可以构建图像。

              【讨论】:

                【解决方案14】:

                另一个潜在的原因,尤其是当您看到类似的错误时

                Error processing tar file(exit status 1): write /code/node_modules/xxx: no space left on device
                

                您可能想要检查 Docker 应用程序中的“磁盘映像大小”。您可能需要增加磁盘大小。

                【讨论】:

                  【解决方案15】:

                  我在 Ubuntu 中遇到了同样的错误:在命令下方运行并且它起作用了(只需确保在完成后重新开始):

                  /opt/McAfee/ens/tp/init/mfetpd-control.sh stop
                  

                  【讨论】:

                    【解决方案16】:

                    帮我解决。您需要让您的用户在 docker 组中(usermod -aG docker $USER):

                    sudo chmod -R 775 。 sudo chown -R : .

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-09-25
                      • 1970-01-01
                      • 2017-12-13
                      • 1970-01-01
                      • 2019-09-04
                      • 1970-01-01
                      • 2021-11-23
                      相关资源
                      最近更新 更多