Назад | Перейти на главную страницу

Как правильно получить журналы кода из контейнера на хосте с помощью docker compose и томов

Я пытаюсь понять, как разделить журналы, созданные игрушечным проектом, в том. Журналы создаются внутри контейнера докеров.

Для этого я использую docker-compose версии 3. Пока что я создал том и контейнер с помощью docker compose. Однако, когда я проверяю объем, я не нахожу файлов, исходящих из контейнера. Вот архитектура проекта:

Вот что находится внутри docker-compose.yml:

version: '3'
services:


    #Chatbot Service
    test_bot:
        build: ./test_bot
        image: test_bot:1.0
        #restart: always
        expose:
            - "5000"
        ports:
            - "5000:5000"
        volumes:
            - test_volume:/app/test_bot
#            volume:
#              nocopy: true

volumes:
    test_volume:

networks:
    negusnet:
        ipam:
            config:
                - subnet: 172.192.10.0/16

    negus.jitsi:

Вот что находится внутри dockerfile.yml:

FROM python:3.6-slim

#Enviroment variables creation
ENV TEST_HOME=/app/test_bot

# Run updates, install basics and cleanup
# - build-essential: Compile specific dependencies
# - git-core: Checkout git repos
RUN apt-get update -qq \
    && apt-get install -y --no-install-recommends build-essential git-core openssl libssl-dev libffi6 libffi-dev curl nano git wget\
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# use bash always
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

#Define the path of home repository
WORKDIR ${TEST_HOME}


#Copy all files in existing negus_ai repository in docker
COPY . ${TEST_HOME}


RUN python3 ${TEST_HOME}/run_script.py

И напоследок мой test_script:

import logging
import time


logging.basicConfig(filename='Client_logs.log',
    level=logging.INFO,
    format='%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S')

if __name__ == '__main__':
    i=0
    while(True):
        i=i+1

        logging.info("yay is is "+str(i))
        time.sleep(30)

[EDIT1] Для ясности: я не хочу никаких манипуляций, связанных с попаданием внутрь контейнера или необходимостью вручную копировать журналы из него на хост-машину.

[EDIT2] Я проверяю контейнер, используя идентификатор проверки контейнера докеров. Похоже, что с ним не связаны никакие тома. Параметр монтирования пуст.

Решение проблемы было немного сложным. Все, что мне нужно было сделать, это заменить

RUN python3 ${TEST_HOME}/run_script.py

с участием :

ENTRYPOINT python3 ${TEST_HOME}/run_script.py

Судя по всему, привязка тома к контейнеру не производится, если мы используем строку с RUN.