如何使用docker

时间:2019-02-25 19:51:24

标签: python docker logging docker-compose

我正在将python应用程序作为docker容器运行,并且在我的python应用程序中,我正在使用pythons logging类来记录使用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()的文章,但不确定如何使用它,尤其是在运行和记录多个容器的情况下。

2 个答案:

答案 0 :(得分:0)

音量是您所需要的。

您可以创建卷以将内部容器文件夹与本地系统文件夹绑定。这样您就可以将日志存储在logs文件夹中,并将其作为卷映射到本地系统上的任何文件夹。

您可以在docker-compose.yml文件中为要创建的每个服务指定一个卷。参见docs

答案 1 :(得分:0)

内装件是您所需要的。

enter image description here

如您所见,绑定挂载可从您的主机文件系统访问。与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上工作,请记住绑定到当前用户目录!