如何使docker exec的标准输出与在容器中运行命令一样详细?

12

如果我使用Docker的exec命令运行一个命令,就像这样:

docker exec container gulp

执行该命令时,终端窗口没有任何输出。

然而,如果我手动进入容器并执行该命令:

docker exec -ti container bash
gulp

我看到了gulp的输出:

[13:49:57] 使用gulpfile ~/code/services/app/gulpfile.js
[13:49:57] 开始执行 'scripts'...
[13:49:57] 开始执行 'styles'...
[13:49:58] 开始执行 'emailStyles'...
...

如何运行我的第一个命令并将输出发送到终端窗口?

顺便说一下:我在 npm installforever restart等命令中也看到了相同的行为。因此,这不仅仅是gulp的问题,而可能是docker如何映射标准输出的问题。

1个回答

9
你如何运行第一个命令并将输出发送到终端窗口?
您需要确保使用-t选项启动docker run以分配伪tty。
然后,没有-tdocker exec仍将起作用。 我在这里讨论了docker exec -it, 其中提到了"修复Docker TERM变量问题")
docker@machine:/c/Users/vonc/prog$ d run --name test -dit busybox
2b06a0ebb573e936c9fa2be7e79f1a7729baee6bfffb4b2cbf36e818b1da7349
docker@machine:/c/Users/vonc/prog$ d exec test echo ok
ok

在Dockerfile的RUN指令中,如何使用“-t”? - Michael Irigoyen
1
@MichaelIrigoyen 这不是 -tdocker run运行时 选项,而不是静态的 docker build 指令。 - VonC
但是实际上,我们的RUN命令运行了一个包含npm安装、gulp和forever启动的bash脚本。在运行时生成的日志并没有提供我们所需的详细信息。手动运行相同的bash脚本也会出现同样的问题,日志不够详细。使用“-t”选项运行该脚本可以显示我们需要的额外信息。正如我所说,上面的示例是重现此问题最简单的方法。有什么想法吗? - Michael Irigoyen
1
@MichaelIrigoyen 我现在明白了:RUN确实是在一个中间容器中执行的。真正的问题是:当docker在docker build期间运行中间容器时,我能否设置-t?我会研究一下的。 - VonC
@MichaelIrigoyen 去年十月份的时候,它没有工作:https://dev59.com/2ZDea4cB1Zd3GeqPXBov - VonC
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接