首页 > 解决方案 > 如何使用 docker 使 python 日志记录持久化

问题描述

我正在将python应用程序作为docker容器运行,并且在我的python应用程序中,我使用 pythonslogging类来记录执行步骤,使用logger.info,logger.debuglogger.error. 问题是日志文件仅在docker容器中持久存在,如果容器消失,则日志文件也会丢失,而且每次我必须查看日志文件时,我都必须手动将容器日志文件复制到本地系统。我想要做的是,无论将任何日志写入容器日志文件,它都应该在本地系统上持久存在 - 所以写入本地系统日志文件或自动将 docker 日志文件挂载到本地系统。

关于我的主机的几件事:

  1. 我在机器上运行多个 docker 容器。
  2. 我的示例 docker-core 文件是: FROM server-base-v1 ADD . /app WORKDIR /app ENV PATH /app:$PATH CMD ["python","-u","app.py"]

  3. 我的示例 docker-base 文件是: FROM python:3 ADD ./setup /app/setup WORKDIR /app RUN pip install -r setup/requirements.txt

  4. 我的 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()

标签: pythondockerloggingdocker-compose

解决方案


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.


推荐阅读