AWS 日志驱动程序未将 `tail -f` 提取到 Docker 图像 `stdout`
AWS log driver not picking up `tail -f` to Docker image `stdout`
我有一个正在使用 Fargate 部署的 Alpine Docker 映像。这是它的命令 运行s:
crond -d 8 && tail -f /var/log/cron.log
我正在通过将 >> /var/log/cron.log 2>&1
附加到 cron 作业定义来写入文件。当我 运行 docker-compose up
时,我在 Docker 的输出中看到了所有日志,所以我知道日志记录在容器内工作。
我在 CloudFormation 模板中将其作为容器定义的一部分:
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-region: "us-east-1"
awslogs-group: !Ref AvRcloneLogGroup
awslogs-stream-prefix: "av-rclone"
当我试验我的 Docker 命令时,我通过 运行ning crond
在前台获得了 CloudWatch 的一些日志,调试日志到 stdout
,所以我知道 AWS 日志驱动程序正在工作。
但是,当我尝试切换到 tail -f
以将作业日志输出到日志驱动程序时,控制台中没有显示任何内容。
如何让 AWS 日志驱动程序获取这些日志?
我在 this answer 的帮助下找到了解决类似问题的方法,但我仍然不确定为什么 tail -f
对我不起作用。
为了确保 Fargate 使用虚拟终端实例化图像,我将此行添加到我的 CloudFormation 模板中 TaskDefinition
内的 ContainerDefinition
:
PseudoTerminal: true
然后我将 Dockerfile CMD
更改为:
CMD tty; crond -f
-f
选项告诉crond
在前台运行,防止图像过早退出。
包括 tty
不是绝对必要的,但我是如何找到虚拟终端的文件名的。在我的例子中,输出是这样的:
/dev/pts/0
我没有将 cron 作业的输出附加到日志文件,而是通过将其附加到每个作业定义的末尾将其重定向到虚拟终端:
> /dev/pts/0 2>&1
就是这样。现在,我的作业的输出通过管道传输到虚拟终端,最终出现在我的 CloudWatch 组中。
我有一个正在使用 Fargate 部署的 Alpine Docker 映像。这是它的命令 运行s:
crond -d 8 && tail -f /var/log/cron.log
我正在通过将 >> /var/log/cron.log 2>&1
附加到 cron 作业定义来写入文件。当我 运行 docker-compose up
时,我在 Docker 的输出中看到了所有日志,所以我知道日志记录在容器内工作。
我在 CloudFormation 模板中将其作为容器定义的一部分:
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-region: "us-east-1"
awslogs-group: !Ref AvRcloneLogGroup
awslogs-stream-prefix: "av-rclone"
当我试验我的 Docker 命令时,我通过 运行ning crond
在前台获得了 CloudWatch 的一些日志,调试日志到 stdout
,所以我知道 AWS 日志驱动程序正在工作。
但是,当我尝试切换到 tail -f
以将作业日志输出到日志驱动程序时,控制台中没有显示任何内容。
如何让 AWS 日志驱动程序获取这些日志?
我在 this answer 的帮助下找到了解决类似问题的方法,但我仍然不确定为什么 tail -f
对我不起作用。
为了确保 Fargate 使用虚拟终端实例化图像,我将此行添加到我的 CloudFormation 模板中 TaskDefinition
内的 ContainerDefinition
:
PseudoTerminal: true
然后我将 Dockerfile CMD
更改为:
CMD tty; crond -f
-f
选项告诉crond
在前台运行,防止图像过早退出。
包括 tty
不是绝对必要的,但我是如何找到虚拟终端的文件名的。在我的例子中,输出是这样的:
/dev/pts/0
我没有将 cron 作业的输出附加到日志文件,而是通过将其附加到每个作业定义的末尾将其重定向到虚拟终端:
> /dev/pts/0 2>&1
就是这样。现在,我的作业的输出通过管道传输到虚拟终端,最终出现在我的 CloudWatch 组中。