我有将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文件。
答案 0 :(得分:1)
您正在安装/ app / logs,但是env变量指示日志是写入/ logs而不是/ app / logs。
更改一条路径或另一条路径,看看问题是否仍然存在。
通常,您的方法是正确的。但是对于生产用途,尤其是在群集环境中,最好使用serilog,splunk,应用程序见解或其他基于服务的日志收集器,因为在扩展容器时可能难以维护文件。