如何`docker导入`ubuntu云图片?

How to `docker import` ubuntu cloud image?

尝试像这样从他们的网站导入 ubuntu 云图像:

docker import http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-root.tar.gz trusty-server-clouding

并出现此错误:

Unhandled tar header type 83

ADD trusty-server-cloudimg-amd64-root.tar.gz 创建 Dockerfile 也没有用,它只是将 tarball 文件按原样添加到容器中。

curl http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-root.tar.gz | docker run -i --rm -w /tmp/image ubuntu bash -c 'tar -xzf - && tar -czf - .' | docker import --change 'CMD ["/bin/bash"]' - trusty-server-cloudimg

检查:

docker run -it --rm trusty- cat /etc/issueserver-cloudimg
#>>> Ubuntu 14.04.3 LTS \n \l

说明

这是一个 feature-bug in Docker/Go tar 实现,它无法处理一些极端情况 tar 使用具有异常选项的本机 tar 实用程序创建的球。

解决此问题的简单方法是重新打包 tarball,不使用任何额外的命令行选项,如下所示:

mkdir -p /tmp/image
chdir /tmp/image
tar -xzf /some/broky.tar.gz
sudo tar -czf . /some/fixed.tar.gz

然后用它喂 docker:

docker import /some/fixed.tar.gz fixed-image

为了在脚本中使用,或在不同的平台上使用,或者如果 sudo 不存在,只需使用 docker 为自己重新包装 tarballs 就很方便:

docker run -i --rm -w /tmp/image ubuntu bash -c 'tar -xzf - && tar -czf - .'

您可以将损坏的 tar 球通过管道传输到此命令,并将其输出通过管道传输到 docker import - image-name,如上面的简短回答所示。