Docker ERROR:处理tar文件时出错(退出状态1):意外的EOF

时间:2017-03-14 11:11:03

标签: docker docker-compose

我需要空间并执行: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

16 个答案:

答案 0 :(得分:41)

我有同样的问题,批准的答案对我不起作用。

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

答案 1 :(得分:14)

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

docker image prune

现在处理这种情况:

  • 停止Docker服务

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

  • 删除/var/lib/docker 警告:这将删除图像,容器,卷,...请确保先备份它。

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

    systemctl start docker  
    

<强>更新

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

答案 2 :(得分:2)

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

问题在于docker-compose build将禁止发布该问题的信息。找出问题所在

请勿使用:

docker-compose build XXX

相反,打开您的docker-compose.yml,找到该服务的 build:标签给您一个问题,例如

services:
   yourservice: 
       build: yourservice-directory/

然后运行:

docker build yourservice-directory

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

答案 3 :(得分:2)

永久解决此错误

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'.

答案 4 :(得分:1)

对我来说,问题结果是Docker Pull被挂了,所以我按CTRL + C&#39; d再次尝试。相同的错误消息。

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

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

  • MAC Docker版本17.12.0-ce,build c97c6d6

答案 5 :(得分:1)

对我来说,这是一个权限错误。 我遇到了与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

答案 6 :(得分:0)

如果您尝试查看权限,泊坞窗重置,泊坞窗系统修剪,删除所有容器,删除所有图像(悬空或其他),阅读有关此问题的所有内容并且没有成功。尝试卸载docker并重新安装稳定版本。

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

答案 7 :(得分:0)

尝试增加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

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

答案 8 :(得分:0)

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

docker-compose作为tar文件将上下文传递给引擎,因此,build命令将tar(.dump文件)打包在另一个tar文件(docker上下文)中,因此抛出了一个意外的EOF。

由于我不需要容器中的.dump文件,因此将其添加到了我的.dockerignore文件中。

答案 9 :(得分:0)

参考: 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 :(得分:0)

我尝试了从重新启动,重新安装Docker到清除/var/lib/docker的所有操作。

我的原因是项目中的构建上下文损坏。我运行git clean将项目目录重新设置为原始状态后,就能够docker-compose

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

编辑:过了一会儿,它又发生了。这次git clean并没有解决。我敢肯定,它只会在Ubuntu上发生。我的拱门同事从未遇到过。

答案 11 :(得分:0)

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

  1. 确保在docker-compose.yml上指定图像名称 例如,将图像名称和container_name指定为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

不确定更改文件夹路径时为什么可以生成图像。

答案 12 :(得分:0)

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

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

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

在项目根目录上。

问题在于docker-compose构建试图读取 pycache 文件夹中的文件。

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

希望这会有所帮助。

Saludos。

答案 13 :(得分:0)

造成这种情况的另一个潜在原因,尤其是当您看到类似

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

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

答案 14 :(得分:0)

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

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

答案 15 :(得分:0)

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

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