捕获在Docker中运行的程序的输出

我使用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 

有没有办法只捕获docker运行的bash脚本生成的输出,而没有任何额外的消息/错误/警告,docker可能会输出?

docker输出发送到标准错误,所以它可以从你正常的脚本输出区分。

如果你需要容器​​中的stderr和stdout,使用docker logs的输出,这是最安全的select,但是设置起来更复杂一些。 注释日志只能在默认的json-filejournald 日志驱动程序中工作 。

 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 

如果你只对你的进程的stdout感兴趣,redirectstdout到一个文件。 任何错误输出,连同docker工人,都将进入屏幕。 该文件将只包含标准输出数据。

 docker run --rm --volume=/tmp/test.sh:/tmp/test.sh:ro \ --entrypoint=/bin/bash node:4.6.0 -xe /tmp/test.sh > output 

你也可以将stderrredirect到容器内的标准输出,所以你只会丢失docker标准错误输出。

 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