我使用docker来运行bash脚本,我需要捕获它的输出和它的输出.
docker run --rm --volume=/tmp/test.sh:/tmp/test.sh:ro --entrypoint=/bin/bash node:4.6.0 -xe /tmp/test.sh
问题是我也从docker下载图像获得输出.想法是这样的:
Unable to find image 'node:4.6.0' locally
4.6.0: Pulling from library/node
6a5a5368e0c2: Pulling fs layer
7b9457ec39de: Pulling fs layer
ff18e19c2db4: Pulling fs layer
6a3d69edbe90: Pulling fs layer
0ce4b037e17f: Pulling fs layer
Run Code Online (Sandbox Code Playgroud)
有没有办法只捕获由docker运行的bash脚本生成的输出,而没有docker可能输出的任何其他消息/错误/警告?
docker输出发送到stderr,因此可以将其与正常的脚本输出区分开来.
如果您需要容器中的stderr和stdout,请使用输出docker logs,这是最安全的选项,但设置起来要复杂一些.注意日志仅在本地使用默认json-file和journald 日志驱动程序.
CID=$(docker run -d --volume=/tmp/test.sh:/tmp/test.sh:ro \
--entrypoint=/bin/bash node:4.6.0 -xe /tmp/test.sh)
docker wait $CID
docker logs $CID
docker rm $CID
Run Code Online (Sandbox Code Playgroud)
如果您只对进程的stdout感兴趣,请将stdout重定向到文件.任何错误输出以及码头工具都将进入屏幕.该文件仅包含stdout数据.
docker run --rm --volume=/tmp/test.sh:/tmp/test.sh:ro \
--entrypoint=/bin/bash node:4.6.0 -xe /tmp/test.sh > output
Run Code Online (Sandbox Code Playgroud)
您还可以将stderr重定向到容器内的stdout,这样您只会丢失docker stderr输出.
docker run -rm --volume=/tmp/test.sh:/tmp/test.sh:ro \
--entrypoint=/bin/bash node:4.6.0 -xec '/tmp/test.sh 2>&1' > output
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3652 次 |
| 最近记录: |