将docker容器中的多个日志文件重定向到stdout(遗留应用程序)

时间:2016-05-17 15:38:41

标签: bash shell logging docker

我必须将遗留应用程序放入Docker容器中。该应用程序运行正常,但我无法显示所有日志文件。问题是应用程序在启动可执行文件后创建了几个日志文件(例如service.log, license.log, security.log等)。

我有一个启动脚本(让我们称之为start.sh),它准备了一些东西(链接,配置),然后启动创建上述日志文件的应用程序。

经过一些谷歌搜索后,我找到similar problem并尝试应用使用命名管道的解决方案(创建/proc/1/fd/1的链接无效)。所以我将以下内容放在起始脚本中:

mkfifo /path/to/app/license.log && tail -f /path/to/app/license.log &
mkfifo /path/to/app/security.log && tail -f /path/to/app/security.log &
...

但问题是只有FIRST文件会被重定向到docker logs。其他根本不可见。

奇怪的是,在start.sh中我有一行source before_start.sh,它根据环境执行一些特定的命令。将mkfifo license.log放置在start.shmkfifo service.log before_start.sh中。 问题是我有更多文件,不想source所有文件。

有没有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

因为它是遗留应用程序,所以我们仍然需要有日志文件。在这种情况下,适合我的解决方案是按touch创建文件并使用tail读取它们:

touch /path/to/app/logfile.log && tail -f /path/to/app/logfile.log &

所以用mkfifo替换touch解决了我的问题。