使 docker-compose logs -f 只显示 /dev/stderr

Amb*_*dex 8 docker docker-compose

我有一个运行 Apache2 的容器,并有一些日志文件将它们的输入打印到/dev/stdout/dev/stderr. 运行时,docker-compose logs -f它会同时打印stdoutstderr混合打印。有没有办法只显示两者之一?

lrwxrwxrwx 1 root root 11 Oct 10 01:22 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Oct 10 01:22 error.log -> /dev/stderr
lrwxrwxrwx 1 root root 11 Oct 10 01:22 other_vhosts_access.log -> /dev/stdout
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想有选择地在输出之间切换。我可以想象--only-stderr--only-stdout旗帜。我知道可能的解决方法,但我很感兴趣,如果这本身是可能的。

小智 9

我明白你的意思,我需要同样的东西,但显然 docker-compose 目前不支持它。

请参阅此功能请求:https : //github.com/docker/compose/issues/6078


尽管使用 docker-compose 无法做到这一点,但您仍然可以通过跟踪特定 Docker 容器的日志来实现类似的功能。

你写了“我知道可能的解决方法”,所以你可能已经知道了,但它希望能帮助访问此页面的其他人:)

执行后docker-compose up,列出正在运行的容器:

docker ps
Run Code Online (Sandbox Code Playgroud)

复制给定容器的 NAME 并读取其日志:

docker logs NAME_OF_THE_CONTAINER -f
Run Code Online (Sandbox Code Playgroud)

只读取错误日志

docker logs NAME_OF_THE_CONTAINER -f 1>/dev/null
Run Code Online (Sandbox Code Playgroud)

只读取访问日志

docker logs NAME_OF_THE_CONTAINER -f 2>/dev/null
Run Code Online (Sandbox Code Playgroud)