无法使用 docker api 使用curl 从 tarball 加载 docker 映像

Zho*_*Man 0 api curl load docker

我的码头版本:

[cloud-user@firstroot-1 curl]$ sudo docker version

Client:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d5108
 Built:        Thu Feb  4 18:34:50 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d5108
 Built:        Thu Feb  4 18:34:50 2016
 OS/Arch:      linux/amd64
Run Code Online (Sandbox Code Playgroud)

我想使用curl 从 tarball 加载图像,但失败了。但是我用这个命令加载它没有问题:

**sudo docker load --input utuntu.tar**  //works
Run Code Online (Sandbox Code Playgroud)

压缩包信息

[cloud-user@firstroot-1 curl]$ pwd
/home/cloud-user/curl
[cloud-user@firstroot-1 curl]$ ls -l utuntu.tar
-rwxrwxrwx 1 cloud-user cloud-user 130499072 Aug  1 15:46 utuntu.tar
Run Code Online (Sandbox Code Playgroud)

这是我尝试过但失败的两个curl命令:

sudo ./curl --unix-socket  /var/run/docker.sock  -X POST -H "Content-Type: application/x-tar" -d "@/home/cloud-user/curl/utuntu.tar"   http:/images/load
Untar re-exec error: exit status 1: output: archive/tar: invalid tar header

sudo ./curl --unix-socket  /var/run/docker.sock  -X POST -H "Content-Type: application/x-tar" -d "/home/cloud-user/curl/utuntu.tar"   http:/images/load
Untar re-exec error: exit status 1: output: unexpected EOF
Run Code Online (Sandbox Code Playgroud)

curl 可与 /images/json、/containers/id/start 等命令配合使用,但不能加载。

images/load 文档确实有很多信息https://docs.docker.com/engine/reference/api/docker_remote_api_v1.22/

Mat*_*att 5

用于--data-binary @<filepath>从文件“完全按照指定发布数据,无需进行任何额外处理”。

sudo curl --verbose \
 --unix-socket /var/run/docker.sock \
 --request POST \
 --header "Content-Type: application/x-tar" \
 --data-binary "@image.tar" \
 http:/images/load
Run Code Online (Sandbox Code Playgroud)

-d--data尝试像通过浏览器提交表单一样发送数据。