user12384512
user12384512

Reputation: 3401

Docker - error when extracting in Centos (invalid tar header)

Docker version 18.06.1-ce, build e68fc7a
CentOS Linux release 7.5.1804 (Core)

My docker file is

FROM node:8

When I execute - docker build -t my-image . i got following error

Sending build context to Docker daemon  44.03kB
Step 1/1 : FROM node:8
8: Pulling from library/node
f189db1b88b3: Extracting [==================================================>]  54.25MB/54.25MB
3d06cf2f1b5e: Download complete
687ebdda822c: Download complete
99119ca3f34e: Download complete
e771d6006054: Download complete
b0cc28d0be2c: Download complete
7225c154ac40: Download complete
7659da3c5093: Download complete
failed to register layer: ApplyLayer exit status 1 stdout:  stderr: archive/tar: invalid tar header

Any clue? Any suggestion what can I do to fix it ?

I have the same error when running docker run -it ubuntu

Upvotes: 4

Views: 5093

Answers (3)

BMitch
BMitch

Reputation: 264701

The error message indicates that the image you are attempting to download has been corrupted. There are a few places I can think of where that would happen:

  • On the remote registry server
  • In transit
  • In memory
  • On disk
  • By the application

Given the popularity of the image, I would rule out the registry server having issues. Potentially you have an unstable server with memory or disk issues that were triggered when downloading a large image. On Linux, you'd likely see kernel errors from this in dmesg.

The version of docker is recent enough that any past issues on this have long since been fixed. There's only a single issue on the tar file processing related to very large layers (over 8GB) which doesn't apply to the image you are pulling. The tar processing is embedded directly into docker, so changing or upgrading your tar binary won't affect docker.

Potentially you could have an issue with the storage driver and the backend storage device. Changing from devicemapper to overlay2 if you haven't already would be a good first step if docker hasn't already defaulted to this (you can see your current storage driver in docker info and change it with an entry in /etc/docker/daemon.json).

My first guess on that list is the "in transit" part. Since the request will be over https, this won't be from a bad packet. But a proxy on the network that intercepts all web traffic could be the culprit. If you have a proxy, make sure docker is configured to login and use your proxy. For more details on that, see https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

Upvotes: 1

Martin Zeitler
Martin Zeitler

Reputation: 76799

when you have the same error on tar extraction, the fetched image might indeed be corrupt.

comments on issue 15561 hint for, that building locally still works.

Upvotes: 0

Ivan Gurzhiy
Ivan Gurzhiy

Reputation: 229

Try unpack your image with: tar tvf yourarchive

If there no errors, try update docker(if it possible) If error presents try rebuild your archive.

Similar issue described there

Upvotes: 0

Related Questions