Docker 在ENTRYPOINT中将流程输送到消费者有多糟糕?

Docker 在ENTRYPOINT中将流程输送到消费者有多糟糕?,docker,amazon-ecs,docker-run,Docker,Amazon Ecs,Docker Run,在Dockerfile中使用这样的内容会有多糟糕: ENTRYPOINT node . | tee >(send_logs_to_elastic_search) 大多数日志解决方案都需要一些非常糟糕的配置。以上是我们以编程方式捕获日志并编写自己的胶水代码的一种方法 上述解决方案的主要问题是CMD参数不会附加到节点进程?我假设它们将被追加到tee进程中?大概是这样的: docker run foo --arg1 --arg2 我想那会是这样的: node . | tee >(sen

在Dockerfile中使用这样的内容会有多糟糕:

ENTRYPOINT node . | tee >(send_logs_to_elastic_search)
大多数日志解决方案都需要一些非常糟糕的配置。以上是我们以编程方式捕获日志并编写自己的胶水代码的一种方法

上述解决方案的主要问题是
CMD
参数不会附加到
节点
进程?我假设它们将被追加到
tee
进程中?大概是这样的:

docker run foo --arg1 --arg2
我想那会是这样的:

node . | tee >(send_logs_to_elastic_search) --arg1 --arg2
有人知道吗


另一个潜在的问题是,您的容器的可配置性较差—它是“硬编码”的,用于将日志发送到
send\u logs\u to\u elastic\u search
过程

您如何运行您的容器

通常,您可以将filebeats或其他内容直接连接到
/var/lib/docker/containers/*/*.json.log
,并让主机发送所有容器的所有日志

这是一个很好的教程,因为他们使用另一个容器进行卷装载和日志提取表明,如果使用
ENTRYPOINT
的shell形式,那么
CMD
将被完全忽略。如果不是,则
CMD
将以您显示的方式追加

如果这只是关于日志记录,我建议不要尝试在容器内配置日志记录。这简化了映像设置(它只需要应用程序,而不是所有可能的日志目标)。和都是移动日志消息的常用工具

如果您正在研究更复杂的脚本,我几乎总是将其写入一个独立的shell脚本,而不是尝试将其直接写入Dockerfile

。。。
复制docker-entrypoint.sh/
运行chmod+x/docker-entrypoint.sh
入口点[“/docker ENTRYPOINT.sh”]
CMD[“节点”,“节点”]
入口点脚本将接收命令部分作为命令行参数。通常,只要运行该命令,它就会以执行“$@”结束。如果您愿意让shell包装器成为主容器进程,那么可以将命令的输出通过管道传输到某个地方

#/垃圾箱/垃圾箱
“$@”发送日志到elasticsearch

我觉得这听起来很复杂,但我会阅读链接thanksMayb,但它是所有容器的通用解决方案,是微服务的良好使用。有一天你可能会把它弄脏,然后把它变成一个容器