【问题标题】:How to check python-logging logs in a Docker container micro-service如何检查 Docker 容器微服务中的 python 日志记录
【发布时间】:2019-05-02 13:51:34
【问题描述】:

我刚刚开始使用 Docker。

我正在处理由另一位开发人员编写的项目。在项目Docker容器中,我有三个微服务(aggregatore、classificatore、testmicro),每个都使用python模块logging进行调试。

我的问题是我不知道在哪里可以查看logging 输出。

docker-compose.yml

version: '2.1'
services:
  files:
    image: busybox
    volumes:
     [..]

  grafana:
     [..]

  prometheus:
     [..]

  aggregatore:
   [..] 

  classificatore:
    build: classificatore/.
    volumes:    
      - [..]
    volumes_from: 
      - files
    ports: 
      - [..]
    command: ["python", "/src/main.py"]
    depends_on: 
      rabbit:
        condition: service_healthy

  testmicro:
    [..]    
  rabbit:
    [..]

我是终端,我运行

$docker-compose up -d

这会启动所有微服务。

让我们专注于分类服务。

分类器/Dockerfile

FROM python:3
RUN mkdir /src
ADD requirements.txt /src/.
WORKDIR /src
RUN pip install -r requirements.txt
ADD . /src/.
RUN mkdir -p /tmp/reqdoc
CMD ["python", "main.py"]

classificatore/main.py

import logging

logging.basicConfig(format='%(asctime)s %(message)s', level=logging.DEBUG)
logging.getLogger('pika').setLevel(logging.WARNING)
log = logging.getLogger()
[..]
app = Flask( __name__ , template_folder='./web')

@app.route("/")
def index(message=None):
    log.info("classificatore index!! ")
    [..]
    return render_template('index.html', files1=files1, files2=files2, message=message)

在上面的代码中,输出文本“classificatore index”去哪里了?

感谢您提供的任何支持。

【问题讨论】:

    标签: python docker docker-compose python-logging


    【解决方案1】:

    docker logs classificatore

    另一种方法是 docker exec -it classificatore bash 然后在你的容器中闲逛

    【讨论】:

    • 谢谢@LeCoon。我得到 $ docker logs classificatore 错误:没有这样的容器:classificatore/
    • 使用docker container ps 并检查您想要的容器ID 或容器名称并将其传递给docker logs 命令。如果您想“实时”检查您的日志,请查看我的回答。
    • 没错,你确定你docker-compose up -d工作了吗?正如@michalk 所说,docker ps 将帮助您找到您的容器。
    • 谢谢@LeCoonzarakailloux,现在我可以看到标准输出了!现在的问题是 Docker 没有编译我的 classificatore/main.py,实际上我认为 Docker 正在使用位于其他地方的源文件。我知道题外话了,我会在一个新问题中提问。
    • 请把链接发给我,我想我知道了
    【解决方案2】:

    您应该修改您的 Dockerfile 以使用无缓冲选项运行 python 脚本。

    -u : 无缓冲的二进制标准输出和标准错误;还有 PYTHONUNBUFFERED=x 参见手册页,了解与 '-u' 相关的内部缓冲的详细信息

    CMD ["python", "-u", "main.py"]
    

    【讨论】:

      【解决方案3】:

      正如在其他答案中发布的那样,您可以使用docker logs 命令。或者,如果您想将当前终端的标准输入、输出和错误(或三者的任意组合)附加到正在运行的容器,请查看docker attach 命令。这将使您能够“实时”检查您的日志。

      【讨论】:

        猜你喜欢
        • 2021-08-18
        • 2021-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 2018-09-27
        相关资源
        最近更新 更多