gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:07:58 25 4
gpt4 key购买 nike

我使用 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,因此它可以与您的普通脚本输出区分开来。

如果您需要容器中的 stderr 和 stdout,请使用 docker logs 的输出,这是最安全的选项,但设置起来有点复杂。注意日志只能在本地使用默认值 json-filejournald log drivers .

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

如果您只对流程的标准输出感兴趣,请将标准输出重定向到文件。任何错误输出以及 docker 都会显示在屏幕上。该文件将仅包含标准输出数据。
docker run --rm --volume=/tmp/test.sh:/tmp/test.sh:ro \
--entrypoint=/bin/bash node:4.6.0 -xe /tmp/test.sh > output

您还可以将 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

关于docker - 捕获在 Docker 中运行的程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43216799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com