如何使用docker使python日志持久化
我正在运行一个如何使用docker使python日志持久化,python,docker,logging,docker-compose,Python,Docker,Logging,Docker Compose,我正在运行一个python应用程序作为docker容器,在我的python应用程序中,我使用pythonslogging类来记录执行步骤,使用logger.info、logger.debug和logger.error。问题是日志文件仅在docker容器中持续存在,如果容器消失,日志文件也会丢失,而且每次我必须查看日志文件时,我都必须手动将容器日志文件复制到本地系统。我要做的是,无论将什么日志写入容器日志文件,它应该在本地系统上保持不变-因此写入本地系统日志文件或自动将docker日志文件装载到本
python
应用程序作为docker
容器,在我的python
应用程序中,我使用pythonslogging
类来记录执行步骤,使用logger.info
、logger.debug
和logger.error
。问题是日志文件仅在docker
容器中持续存在,如果容器消失,日志文件也会丢失,而且每次我必须查看日志文件时,我都必须手动将容器日志文件复制到本地系统。我要做的是,无论将什么日志写入容器日志文件,它应该在本地系统上保持不变-因此写入本地系统日志文件或自动将docker日志文件装载到本地系统
关于我的主机的几件事:
从server-base-v1
加上/应用程序
WORKDIR/app
环境路径/应用程序:$PATH
CMD[“python”、“-u”、“app.py”]
来自python:3
添加./setup/app/setup
WORKDIR/app
运行pip安装-r setup/requirements.txt
server-core-v1
容器(名称不同)并行运行,每个容器都有自己的日志文件
如果有更好的策略使用docker登录python并使其持久化,我也将不胜感激。我读过几篇文章提到使用sys.stderr.write()和sys.stdout.write(),但不知道如何使用它,特别是在多个容器运行和日志记录的情况下。卷是您需要的 您可以创建卷以将内部容器文件夹与本地系统文件夹绑定。这样,您就可以将日志存储在
logs
文件夹中,并将其作为卷映射到本地系统上的任何文件夹
您可以在docker-compose.yml文件中为正在创建的每个服务指定一个卷。请参阅。绑定挂载是您所需要的 如您所见,可以从主机文件系统访问绑定装载。这与VM体系结构中的共享文件夹非常相似。 通过将卷直接安装到PC上的path,您可以简单地实现这一点。 就你而言:
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:
- ./yours/example/host/path:/etc/localtime:ro
只需将/yours/example/host/path
替换为主机上的目标目录即可。
在这个场景中,我相信记录器在服务器端
如果您在windows上工作,请记住在当前用户目录中绑定 将卷附加到容器。将日志文件存储在卷中。即使删除了容器,卷中仍有日志文件
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:
- ./yours/example/host/path:/etc/localtime:ro