python - 如何使用 docker 使 python 日志记录持久化
问题描述
我正在将python
应用程序作为docker
容器运行,并且在我的python
应用程序中,我使用 pythonslogging
类来记录执行步骤,使用logger.info
,logger.debug
和logger.error
. 问题是日志文件仅在docker
容器中持久存在,如果容器消失,则日志文件也会丢失,而且每次我必须查看日志文件时,我都必须手动将容器日志文件复制到本地系统。我想要做的是,无论将任何日志写入容器日志文件,它都应该在本地系统上持久存在 - 所以写入本地系统日志文件或自动将 docker 日志文件挂载到本地系统。
关于我的主机的几件事:
- 我在机器上运行多个 docker 容器。
我的示例 docker-core 文件是:
FROM server-base-v1 ADD . /app WORKDIR /app ENV PATH /app:$PATH CMD ["python","-u","app.py"]
我的示例 docker-base 文件是:
FROM python:3 ADD ./setup /app/setup WORKDIR /app RUN pip install -r setup/requirements.txt
我的 docker-compose.yml 文件的示例是:
`
version: "2"
networks:
server-net:
services:
mongo:
container_name: mongodb
image: mongodb
hostname: mongodb
networks:
- server-net
volumes:
- /dockerdata/mongodb:/data/db
ports:
- "27017:27017"
- "28017:28017"
server-core-v1:
container_name: server-core-v1
image: server-core-v1:latest
depends_on:
- mongo
networks:
- server-net
ports:
- "8000:8000"
volumes:
- /etc/localtime:/etc/localtime:ro
`
上面的 yml 文件示例只是我实际 yml 文件的一部分。我有多个server-core-v1
容器(具有不同的名称)并行运行,每个容器都有自己的日志文件。
如果有一些更好的策略来使用 docker 登录 python 并使其持久化,我也将不胜感激。我读了几篇提到使用但不确定如何使用它的文章,尤其是在运行和记录多个容器的情况下sys.stderr.write()
。sys.stdout.write()
解决方案
Volumes are what you need.
You can create volumes to bind an internal container folder with a local system folder. So that you can store your logs in a logs
folder and map this as a volume to any folder on your local system.
You can specify a volume in the docker-compose.yml file for each service you are creating. See the docs.
推荐阅读
- c# - 我的 ML.Net 推荐算法对 R 平方和均方根值都返回 0
- python - Python通过另一个字典值过滤字典列表
- c# - CsvHelper 为列定义自定义映射
- powershell - Powershell:从读取主机和子字符串与 0 比较中获取 0 返回 false
- dom - 无法让 ngx-infinite-scroll 监听窗口滚动
- python - 我如何使用 python sklearn 线性回归预测数据
- java - 如何使用 lombok builder 反序列化 Java 可选字段?
- python-3.x - 如何将括号更改为方括号
- python - 无法将 Athena 查询读入 pandas 数据帧
- python - 在 Python 中将数据帧随机分层拆分为多个样本