【问题标题】:docker-compose up "ERROR: Error processing tar file(archive/tar: invalid tar header)docker-compose up “错误:处理 tar 文件时出错(归档/tar:tar 标头无效)
【发布时间】:2017-05-15 00:32:53
【问题描述】:

我无法运行 docker-compose updocker-compose build --no-cache。两者都以ERROR: Error processing tar file(archive/tar: invalid tar header) 退出。

我通过跑步让自己陷入了这种境地

停止和移除容器:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

删除所有图像:

docker rmi $(docker images -q)

我尝试了以下方法:

  • docker-compose ps 没有列出任何容器或图像。

  • docker ps -a 也没有列出任何容器。

  • docker image list 没有列出任何图像。

我在调试模式下运行dockerd,我看到了:

DEBU[0998] Calling GET /v1.22/images/codesource_buildbot/json 
ERRO[0998] Handler for GET /v1.22/images/codesource_buildbot/json returned error: No such image: codesource_buildbot

所以看起来好像我已经设法让 docker 进入一个奇怪的状态并且无法让它恢复到工作状态。

我试过docker-compose down,但也没有用。

Docker 版本

Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:14:09 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:14:09 2017
 OS/Arch:      linux/amd64
 Experimental: false

docker-compose 版本:docker-compose 版本 1.12.0,构建 b31ff33

docker-compose.yml

version: '2'
services:
  buildbot:
    build: ./containers/buildbot
    ports: 
      - "8010:8010"
    volumes:
      - "./containers/buildbot/volume:/code"

Dockerfile

FROM debian:latest
WORKDIR /home
RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "python-dev"]
RUN ["apt-get", "install", "-y", "python-pip"]
RUN ["apt-get", "install", "-y", "git-all"]
RUN ["pip", "install", "--upgrade", "pip"]
RUN ["pip", "install", "--ignore-installed", "six"]
RUN ["pip", "install", "service_identity"]
RUN ["pip", "install", "buildbot[bundle]"]
CMD bash wait_for_master.sh

【问题讨论】:

  • 请包含docker version 的完整输出。你的构建目录有多大(目录和子目录中所有文件的大小)?
  • @BMitch 我用上面的完整信息更新了 docker 版本。我正在使用的目录的完整大小是 472K。
  • 我没有想法,但您可能希望包含您正在尝试构建的 Dockerfile 和可以重现此问题的 docker-compose.yml 文件。

标签: linux docker docker-compose


【解决方案1】:

错误消息指出codesource_buildbot 图像不存在。您必须重建它或在 docker-compose.yml 中添加正确的 build 指令

编辑:

PD:你的 Dockerfile 有点太复杂了。你可以使用:

FROM debian:latest WORKDIR /home RUN apt-get update && \ apt-get install -y python-dev \ python-pip \ git-all && \ pip install --upgrade pip && \ pip install --ignore-installed six && \ pip install service_identity && \ pip install buildbot[bundle] CMD bash wait_for_master.sh

我会将--no-cache-dir 添加到pip 命令中,这样Zip 文件就不会被缓存并且图像会更小。

【讨论】:

  • 我在那个文件中有一个构建指令。我添加了上面的文件。
  • 我看到您在 YAML 文件中使用了当前目录 .。您是否在正确的目录中运行 docker-compose? ls 的输出是什么?
  • docker-compose.yml containers: buildbot tools: delete-all-containers.sh delete-all-image
  • 啊啊啊我想我是。 ls -l 显示容器在共享卷中创建的文件夹之一归 root 用户和 root 组所有。我使用 chown 和 chgrp 更改用户和组,docker-compose up --build 开始工作。所以我认为我需要做的是在容器中的其他地方而不是在共享卷中创建该文件夹。
  • 感谢您的帮助!
【解决方案2】:

在类似的经历中,我遇到了同样的问题,我刚刚删除了我作为卷安装的所有文件夹。它发生在运行 Ubuntu GNU/Linux 的机器上。

例如,如果我有以下docker-compose.yml(取自个人项目):

version: '2'
services:

 phpBB_dev:
  build:
    context: .
    dockerfile: Dockerfile
    args:
      XDEBUG_HOST: 172.17.0.1
      XDEBUG_PORT: 9021
      UID: 1000
      GID: 1000
  image: 'pcmagas/phpbb_dev'
  links:
    - mariadb
    - postgresql
  volumes:
    - "$SRC_PATH:/var/www/html:Z"
    - "$SRC_PATH_3_1_10:/var/www/phpBB_3_1_10:Z"
    - "$SRC_PATH_3_0_14:/var/www/phpBB_3_0_14:Z"

 nginx:
  image: nginx
  ports:
    - "5092:5092"
    - "5093:5093"
    - "5094:5094"
  links:
    - "phpBB_dev"
  volumes:
    - './nginx.conf:/etc/nginx/nginx.conf:ro'
    - './logs/dev/nginx:/var/logs'
  volumes_from:
    - 'phpBB_dev'

 mariadb:
  image: mariadb
  volumes:
    - './db/maria:/var/lib/mysql'
  ports:
    - '5434:5432'
  environment:
    MYSQL_RANDOM_ROOT_PASSWORD: "yes"
    MYSQL_ONETIME_PASSWORD: "yes"
    MYSQL_DATABASE: 'phpBB'
    MYSQL_USER: 'phpbb'
    MYSQL_PASSWORD: 'a_dummy_passwd'

 postgresql:
  image: postgres
  volumes:
    - './db/postgresql:/var/lib/postgresql/data'
  ports:
    - '3306:3306'
  environment:
    POSTGRES_DB: 'phpbb'
    POSTGRES_USER: 'phpbb'
    POSTGRES_PASSWORD: 'a_dummy_passwd'

我将删除 mariadb 和 postgresql 存储数据的文件夹 ./db。另外我会删除 nginx 保存其日志的./logs

一个好的经验法则(对于 GNU/Linux 或类似的)是遵循这些步骤:

第一步:

列出所有挂载为 VOLUME 的文件和文件夹,并使用 ls -l 命令拥有所有者 root 和组

第二步:

然后用rm -rf command删除它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2021-06-13
    • 2023-03-09
    • 2018-12-14
    相关资源
    最近更新 更多