我正在将python
应用程序作为docker
容器运行,并且在我的python
应用程序中,我正在使用pythons logging
类来记录使用logger.info
的执行步骤,logger.debug
和logger.error
。这样做的问题是日志文件仅在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()
的文章,但不确定如何使用它,尤其是在运行和记录多个容器的情况下。
答案 0 :(得分:0)
音量是您所需要的。
您可以创建卷以将内部容器文件夹与本地系统文件夹绑定。这样您就可以将日志存储在logs
文件夹中,并将其作为卷映射到本地系统上的任何文件夹。
您可以在docker-compose.yml文件中为要创建的每个服务指定一个卷。参见docs。
答案 1 :(得分:0)
内装件是您所需要的。
如您所见,绑定挂载可从您的主机文件系统访问。与VM体系结构中的共享文件夹非常相似。 您可以通过将卷直接安装到PC上的路径来简单地实现这一点。 就您而言:
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上工作,请记住绑定到当前用户目录!