在 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 或其他基于服务的日志收集器,因为在扩展容器时文件可能难以维护。
我有 .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 或其他基于服务的日志收集器,因为在扩展容器时文件可能难以维护。