Как сделать логирование Python постоянным с докером - PullRequest
0 голосов
/ 25 февраля 2019

Я запускаю приложение python как контейнер docker, а в своем приложении python я использую класс pythons logging для записи шагов выполнения с использованием logger.info, logger.debug и logger.error.Проблема заключается в том, что файл журнала сохраняется только в контейнере docker, и если контейнер исчезает, файл журнала также теряется, а также каждый раз, когда мне приходится просматривать файл журнала, мне приходится вручную копировать журнал контейнера.файл в локальную систему. Что я хочу сделать, так это то, что какой бы журнал не записывался в файл журнала контейнера, он должен быть постоянным в локальной системе - поэтому пишите в файл журнала локальной системы или автоматически монтируйте файл журнала докера в локальную систему.

Несколько вещей о моей хост-машине:

  1. Я запускаю несколько док-контейнеров на машине.
  2. Мой пример файла ядра докера: FROM server-base-v1 ADD . /app WORKDIR /app ENV PATH /app:$PATH CMD ["python","-u","app.py"]

  3. Мой пример базового файла docker: 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 контейнеров (с разными именами), работающих параллельно, каждый из которых имеет свой собственный файл журнала.

Я также был бы признателен, если бы существовали более удачные стратегии ведения журнала в python с помощью docker и обеспечения его постоянства.Я прочитал несколько статей, в которых упоминалось использование sys.stderr.write() и sys.stdout.write(), но не уверен, как это использовать, особенно при работе нескольких контейнеров и ведении журнала.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

привязные крепления - это то, что вам нужно.

enter image description here

Как видите, привязные крепления доступны с вашегофайловая система хоста.Это очень похоже на общие папки в архитектуре виртуальных машин.Вы можете просто добиться этого, подключив том непосредственно к пути на вашем ПК.В вашем случае:

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, не забудьте выполнить привязку в текущем каталоге пользователя!

0 голосов
/ 26 февраля 2019

Тома - это то, что вам нужно.

Вы можете создать тома, чтобы связать внутреннюю папку контейнера с локальной системной папкой.Чтобы вы могли хранить свои журналы в папке logs и сопоставлять их как том с любой папкой в ​​вашей локальной системе.

Вы можете указать том в файле docker-compose.yml для каждой службы, которую высоздаем.См. документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...