如何使用 ENTRYPOINT 或 CMD 从 docker 进程捕获标准输出并通过管道传输到另一个进程

How to capture stdout from docker process and pipe to another using ENTRYPOINT or CMD

我有这个:

ENTRYPOINT ["node", ".", "|", "tee", ">(echo 'bar')"]

但是好像不行,可能是因为我的容器里没有安装tee。 这是正确的方法吗?我想 运行 ECS 上的容器,将 stdout/stderr 从节点进程发送到容器 stdout/stderr 但也捕获它。

例如,我尝试这样做:

ENTRYPOINT ["node", ".", "|", "cat > /dev/null"]

并没有像预期的那样工作。但是,这似乎确实有效:

ENTRYPOINT node . | cat > /dev/null

有人知道为什么吗?

I want to run the container on ECS, send the stdout/stderr from the node process to the containers stdout/stderr

如果节点是容器的主进程,则确实需要 cat 或 tee 等,它会将日志写入容器的 stdout/stderr。如果您将日志写入文件,那么最好将这些日志记录到控制台,因为将日志写入容器中的文件毫无用处。

此外,如果已配置,您将能够在云手表中捕获这些日志。

只需添加这个就足以处理日志案例了。

FROM node:alpine
WORKDIR /app
CMD ["node", "app/server.js"]

这就是日志流的样子。

或者如果你想推送到 ELK 那么流程将是