Docker API - 执行开始 returns "Page not found"

Docker API - Exec start returns "Page not found"

我正在尝试通过 Docker Engine API with cURL. I'm following the instructions in the API doc.
First I create an exec instance 在 运行 docker 容器中执行命令,作为响应,我收到了创建的执行程序的 ID。
然后我在尝试 send a request to start 这个 exec 时使用这个 ID,它看起来如下:

$ curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -x POST "http:/v1.29/exec/myExecID/start"

但是该请求的响应是:

{"message":"page not found"}

这是我的 Docker 版本:

Client:
 Version:      17.05.0-ce
 API version:  1.29
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:10:54 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.05.0-ce
 API version:  1.29 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:10:54 2017
 OS/Arch:      linux/amd64
 Experimental: false

code in the Moby's repository中,他们调用了完全相同的地址。

其他人以前遇到过这个问题吗?如果您能分享您的经验,我将很高兴。

可能是因为您没有像这样包含请求正文:

-d '{"Detach": false, "Tty": false}'

如果您遇到如下错误:

{"message":"No such exec instance '<ID>' found in daemon"}

这意味着您还没有为 exec 创建实例。如果是这样,您需要创建一个新实例

curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \
-d '{"AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "DetachKeys": "ctrl-p,ctrl-q", "Tty": false, "Cmd": ["date"], "Env": ["FOO=bar", "BAZ=quux"]}' \
-X POST http:/v1.29/containers/fafe141c1a2b/exec

输出(示例):

{"Id":"70f08c296d460d2fe254ecd0f8e0416777a6b938bb74a325ffc76405d33d3526"}

之后你可以执行如下所示的操作:

curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \
-d '{"Detach": false, "Tty": false}' \
-X POST http:/v1.29/exec/70f08c296d460d2fe254ecd0f8e0416777a6b938bb74a325ffc76405d33d3526/start

我已经试过了,很有效,希望能帮到你!