3

主要问题

  • curl用来运行我的请求。使用邮递员运行请求似乎在启用或禁用 TTY 之间没有太大区别。
  • Stderr 在启用 TTY 时显示,但在禁用 TTY 时不显示。两者的 AttachStderr 都设置为 true(使用curl)。
  • 标准输出在启用 TTY 的情况下“不完整”(使用curl)。

==========================================

我正在努力弄清楚何时使用 Docker Remote API 分配伪 tty,何时不分配。输出是非常不同的(取决于是否有错误,以及我不太明白的其他事情)。

我正在使用 curl 来执行我的请求。

例子:

没有 TTY:

# ls on a container
curl --unix-socket /var/run/docker.sock -s -H "Content-Type: application/json" -X POST -d  '{"AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Tty": false, "Cmd": [ "ls" ] }' http:/containers/mycontainer/exec
curl --unix-socket /var/run/docker.sock -s -H "Content-Type: application/json" -X POST -d  '{"Detach": false, "Tty": true }' http:/exec/5b2a3882e04432180806deffd7d9417d9f75b439022bce16211c296beb158319/start

这输出:bin boot dev etc exports home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

Tty: true输出 相同的命令boot etc home lib64 mnt proc run srv tmp varsr

但是,如果我尝试做一些会产生错误的事情:

没有 TTY:

# ls /non/existant/path
curl --unix-socket /var/run/docker.sock -s -H "Content-Type: application/json" -X POST -d  '{"AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Tty": false, "Cmd": [ "ls", "/non/existant/path" ] }' http:/containers/mycontainer/exec
curl --unix-socket /var/run/docker.sock -s -H "Content-Type: application/json" -X POST -d  '{"Detach": false, "Tty": true }' http:/exec/11d9bff545d99e64bc1c82b540966e2cceaa48c98fbde851378cdb5de9cae663/start

没有 TTY,我看不到任何输出。

使用 TTY:ls: cannot access '/non/existant/path': No such file or directory

这是怎么回事?

谢谢你。

4

1 回答 1

0

我会用我目前所知道的一切来回答我自己的问题,以防有人看到这一点。

TTY 基本上会使输出看起来像在终端中一样。也就是说,如果有多个文件夹(在我的情况下),它们应该显示在两个不同的行中。

我仍然不知道为什么在禁用 TTY 的情况下看不到 stderr,但这就是我在启用 TTY 的情况下看不到完整标准输出的原因。

于 2017-07-11T20:48:34.263 回答