[英]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.