0

我正在尝试通过带有cURL. 我正在按照API 文档中的说明进行操作
首先,我创建了一个 exec 实例,作为响应,我收到了创建的 exec 的 ID。
然后我在尝试发送请求以启动此 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

Moby 的存储库中的代码中,它们调用的地址完全相同。

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

4

1 回答 1

1

也许发生这种情况是因为您没有像这样包含请求正文:

-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"}

之后,您可以执行 exec ,如下所示:

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

我已经尝试过这种方法并且它有效,希望可以提供帮助!

于 2017-05-31T15:55:11.407 回答