在Docker容器外公开日志文件

时间:2019-05-04 20:15:45

标签: c# docker .net-core docker-compose docker-volume

我有将Serilog作为日志框架的.net核心应用程序。 现在,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文件。

1 个答案:

答案 0 :(得分:1)

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

更改一条路径或另一条路径,看看问题是否仍然存在。

通常,您的方法是正确的。但是对于生产用途,尤其是在群集环境中,最好使用serilog,splunk,应用程序见解或其他基于服务的日志收集器,因为在扩展容器时可能难以维护文件。