簡體   English   中英

如何在 Docker 容器中獲取 Python/vscode 調試的錯誤消息

[英]How can I get the error message of Python/vscode debugging inside a Docker container

我正在使用此工作流在帶有 vscode 的 Docker 容器內調試通用 Python 應用程序。

如果我在 main.py 中引入了錯誤,例如導入了一個不存在的包,然后在 VSCode 中按 F5 進行調試,則在構建 docker 映像后,它會靜默失敗並且不會提供任何有用的錯誤消息。

例如:

執行任務: docker-run: debug < docker run -dt -P --name "projectname-dev" --label "com.microsoft.created-by=visual-studio-code" -v "c:\\Users\\tim .vscode\\extensions\\ms-python.python-2021.10.1317843341\\pythonFiles\\lib\\python\\debugpy:/debugpy:ro" --entrypoint "python3" "projectname:latest" < add88efdff111ae904a38f3d52a52a32531d52a52a32531d52a52a3531d52a52a3531d52a52d825c831d52

終端將被任務重用,按任意鍵關閉它。

如果我刪除錯誤,我有工作代碼,並通過手動運行

docker 運行項目名稱

我可以看到代碼有效。

但是它仍然無法在 vscode 中調試,默默地失敗。 永遠不會到達在第一行設置的斷點。 vscode 根本沒有產生任何消息。

在這種情況下如何查看錯誤消息?

啟動.json:

 version: '3.4'

services:
  projectname:
    image: projectname
    build:
      context: .
      dockerfile: ./Dockerfile
    command: ["sh", "-c", "pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 main.py "]
    ports:
      - 5678:5678

docker-compose.debug.yml

version: '3.4'

services:
  projectname:
    image: projectname
    build:
      context: .
      dockerfile: ./Dockerfile
    command: ["sh", "-c", "pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 main.py "]
    ports:
      - 5678:5678

main.py(最小可行):

import time
import requests 
import json

#import package_that_doesnt_exist

time_look_back = 60*15 # last 15min
time_to_fetch=int(time.time()-time_look_back)
print(time_to_fetch)

Dockerfile:

FROM python:3.9.7-alpine3.14

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

RUN apk add postgresql-dev 
RUN apk add musl-dev
RUN apk add gcc

# Install pip requirements
COPY requirements.txt .

RUN python -m pip install -r requirements.txt

WORKDIR /app
COPY . /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-python-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
CMD ["python", "main.py"]

我試過這種方法,希望它適合你; 如果不是,我很樂意修復它。

啟動文件

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Attach (Remote Debug)",
        "type": "python",
        "request": "attach",
        "port": 5678,
        "host": "localhost",
        "pathMappings": [
          {
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "/app"
          }
        ],
        "justMyCode": false,
        "subProcess": true,
        "redirectOutput": true
      }
    ]
  }

docker-compose.yml

(我通常使用 ptvsd 在容器內進行調試)

version: '3.4'

services:
  projectname:
    environment:
      - DEBUG=1
    image: projectname
    build:
      context: .
      dockerfile: ./Dockerfile
    command: ["sh", "-c", "pip install ptvsd && python main.py"]
    ports:
      - 5678:5678

Dockerfile中,我在CMD之前暴露了5678端口(只看相關部分)

USER appuser

EXPOSE 5678

# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
CMD ["python", "main.py"]

主文件

import time
import requests 
import json
import os

if bool(int(os.environ.get('DEBUG',0))):
    import ptvsd
    ptvsd.enable_attach(address=('0.0.0.0', 5678))
    print("--- PTVS ATTACHED, press F5 on VSCode to start Debugging")
    ptvsd.wait_for_attach()

#import package_that_doesnt_exist

time_look_back = 60*15 # last 15min
time_to_fetch=int(time.time()-time_look_back)
print(time_to_fetch)

現在,使用未注釋的錯誤包和 env DEBUG=0啟動組合: 控制台中的錯誤

使用注釋的錯誤包和 env DEBUG=0啟動組合:

控制台輸出

使用未注釋的錯誤和 env DEBUG=1啟動組合:

控制台輸出

然后使用F5開始調試

調試中的錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM