Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用docker使python日志持久化_Python_Docker_Logging_Docker Compose - Fatal编程技术网

如何使用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
应用程序中,我使用pythons
logging
类来记录执行步骤,使用
logger.info
logger.debug
logger.error
。问题是日志文件仅在
docker
容器中持续存在,如果容器消失,日志文件也会丢失,而且每次我必须查看日志文件时,我都必须手动将容器日志文件复制到本地系统。我要做的是,无论将什么日志写入容器日志文件,它应该在本地系统上保持不变-因此写入本地系统日志文件或自动将docker日志文件装载到本地系统

关于我的主机的几件事:

  • 我在机器上运行多个docker容器
  • 我的docker核心文件示例是:
    
    从server-base-v1
    加上/应用程序
    WORKDIR/app
    环境路径/应用程序:$PATH
    CMD[“python”、“-u”、“app.py”]
    

  • 我的示例docker基本文件是:
    
    来自python:3
    添加./setup/app/setup
    WORKDIR/app
    运行pip安装-r setup/requirements.txt
    

  • 我的docker-compose.yml文件示例如下:

  • `

    `

    上面的yml文件示例只是我实际yml文件的一部分。我有多个
    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