如何使用docker compose和volumes从主机中的容器中正确获取代码日志

如何使用docker compose和volumes从主机中的容器中正确获取代码日志

我想了解如何将玩具项目生成的日志共享到卷中。日志是在 docker 容器内生成的。

为此,我使用的是 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

最后,这是我的测试脚本:

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] 我使用 docker container inspect id 检查容器。似乎没有卷链接到它。mount 参数为空。

答案1

这个问题的解决方案有点棘手。我所要做的就是替换

RUN python3 ${TEST_HOME}/run_script.py

和 :

ENTRYPOINT python3 ${TEST_HOME}/run_script.py

显然,如果我们使用带有 RUN 的行,则卷不会与容器绑定。

相关内容