【问题标题】:Python program don't run in container only when i call a function仅当我调用函数时,Python程序才在容器中运行
【发布时间】:2021-02-05 14:07:09
【问题描述】:

我有一个必须在 docker 容器中运行的 python 程序。当我在我的工作区中执行程序时,程序运行良好。我从 python 图像制作了一个自定义 Dockerfile,这个图像在我的工作区中具有相同版本的相同包。当我使用 compose 运行容器时,容器会启动,但是当我调用特定函数时,程序似乎没有运行。我在此函数调用之前放置了一个打印,并且仅当我注释 func 调用时打印才有效(func 调用在打印之后),当我调用该函数时打印不起作用。

我的码头文件:

FROM python:3.8.5-slim

RUN apt update \
    && apt upgrade -y\
    && apt install -y libsm6 libxext6 libxrender-dev libglib2.0-0 \
    && pip install redis==3.5.3 opencv-contrib-python==4.2.0.32 imutils==0.5.3 scikit-image==0.17.2 \
    && mkdir src
    
WORKDIR /src

CMD ["python"]

我的作曲:

version: '3.1'  

services:  
  redis:
    image: 'redis:alpine'
    command: redis-server --requirepass 123
    ports:
      - '6379:6379'

  doorState-peopleCounter:
    build:
      context: .
      dockerfile: Dockerfile
    image: custom
    volumes:
      - /media/jose/Arquivos/Argos/rasp-services/movementdetectionwindowsdoor:/src
    command: ["python", "Tracker.py"]

使用此代码打印不起作用:

print('[INFO] - Iniciando monitoramento da porta')
tracking.count(source='videos/subindo.mp4')

当我评论 func 调用时,打印工作:

print('[INFO] - Iniciando monitoramento da porta')
#tracking.count(source='videos/subindo.mp4')

【问题讨论】:

  • 您是否在容器的日志中看到任何错误? docker-compose logs doorState-peopleCounter 说什么?
  • 您的撰写文件运行python Tracker.py;你的 Dockerfile 只运行 python.
  • 日志没有显示任何错误
  • Dockerfile CMD 是“python”,但在撰写文件中我运行“python Tracker.py”。该程序仅在我调用 tracking.count() 时不运行

标签: python docker docker-compose dockerfile


【解决方案1】:

我不知道为什么,但是容器日志仅在 python 程序结束时显示程序的打印。所以问题是我没有等待程序完成,我开始认为程序没有运行。

【讨论】:

    【解决方案2】:

    这是python的输出缓冲。这是一个性能特征。您可以使用环境变量 PYTHONUNBUFFERED=1 或通过运行带有 -u 标志的 python 来禁用它。 您也可以使用 flush 关键字参数调用 print。

    print('[INFO] - Iniciando monitoramento da porta', flush=True)
    

    【讨论】:

      【解决方案3】:

      改变

      FROM python:3.8.5-slim

      FROM python:3.8.5

      你可以添加普通的 python,而不是 Slim,它可能很大,但它会解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-11
        • 2019-06-04
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多