在 docker 容器外公开日志文件

Expose log file outside docker container

我有 .net 核心应用程序,其中 Serilog 作为日志框架。 现在 Serilog 正在记录到文件。 我想在容器外公开此文件,并像其他文件一样进行简单访问。

我根据 docker-compose 参考尝试使用 volume 和 volume-bind: https://docs.docker.com/compose/compose-file/#volume-configuration-reference

此外,来自主机的目录是共享的。 但是日志文件出现在特定目录的容器中,但主机上的目录仍然是空的。

我可以使用 DOCKER COPY 命令手动复制此文件。 有没有什么方法可以使这个文件在主机上的我的卷目录中同步?

或者我应该应用一些额外的方法,例如ELK能实现我的目标吗?

这是我的 docker-compose 文件。由于测试,前端部分现在被评论。

version: '3.7'

services:
  backend:
    build: './backend'
    ports:
      - "80:80"
    networks:
      - gateway
    environment:
      - Logger:FilePath=//logs//logs.txt
      - Database:Name=Data Source = ./database.db
    volumes:
      - type: bind
        source: /Users/grzegorz/Desktop/logs
        target: /app/logs/
  #frontend:
  #  build: './frontend'
  #  depends_on:
  #    - backend
  #  ports:
  #    - "4200:4200"
  #  networks:
  #    - gateway

networks:
  gateway: {}

当我打开终端并进入 app/logs 目录时,我可以看到包含当前应用程序日志的 logs.txt 文件。

您正在装载 /app/logs,但 env 变量指示日志写入 /logs,而不是 /app/logs。

换一个路径,看看问题是否仍然存在。

总的来说你的做法是正确的。但对于生产使用,尤其是在集群环境中,最好使用 serilog、splunk、application insights 或其他基于服务的日志收集器,因为在扩展容器时文件可能难以维护。