繁体   English   中英

使用 vscode 从主机调试 docker 容器中运行的 python 代码

[英]debug python code running in docker container from host using vscode

我有一个容器在我的主机上运行,它有一个 python 进程,并且我在主机上安装了 vs 代码。 是否可以从安装 vscode 的主机调试 python 进程? 如果是,如何实现?

由于我不知道您运行的是什么 python 进程,我将以 FastAPI 为例。

  1. 首先,您需要在文件<project_root>/.vscode/launch.json中定义一个新配置。 要访问此文件,您可以 go 到活动栏上的运行和调试部分,然后按顶部的 cog/wheel。

配置中添加一个新项目,如下所示。

{
    "version": "0.2.0",
    "configurations": [
        {
        "name": "Python: Remote Attach",
        "type": "python",
        "request": "attach",
        "connect": {
            "host": "localhost",
            "port": 5678
        },
        "pathMappings": [
            {
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "."
            }
        ]
        }
    ]
}
  1. 现在您需要包含debugpy 如果您使用的是需求文件,则可以将其添加到那里。 如果你使用Poetry ,你可以在你的终端中运行poetry add debugpy (Dockerfile 示例展示了如何在 docker 图像中使用 Poetry)。

  2. 第一个选项- 在您的Dockerfile 中,您需要运行debugpy并使其侦听端口5678 现在,每次运行容器并等待附件时,调试器都会启动。

FROM python:3.10.0

# Set the working directory:
WORKDIR /usr/src

# Copy the pyproject.toml file (or requirements.txt) to cache them in the docker layer:
COPY [ "./src/pyproject.toml", "./"]

# Set the python path if needed.
# For example, if main.py is not located in the project root:
ENV PYTHONPATH="$PYTHONPATH:${PWD}"

# Upgrade pip and install Poetry:
RUN pip install --upgrade pip && pip install poetry==1.1.12

# Project initialization using Poetry:
RUN poetry config virtualenvs.create false \
    && poetry install --no-interaction --no-ansi

# Run the application:
CMD ["python", "-m", "debugpy", "--wait-for-client", "--listen", "0.0.0.0:5678", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload", "--reload-exclude", "tests"]

EXPOSE 8000 5678
  1. 第二个选项- 通过添加以下行在 main.py 文件中设置调试器。 这意味着调试器将在启动时附加到容器; 如果调试器变量设置为 True。
debugger = True

if __name__ == "__main__":
    if debugger:
        import debugpy
        debugpy.listen(("0.0.0.0", 5678))
        debugpy.wait_for_client()

    uvicorn.run(
        "main:app",
        host="localhost",
        port=8000,
        log_level="info",
        reload=True,
    )
  1. 这两个示例都需要Dockerfile来公开端口5678 现在,运行容器后,调试器将“暂停”并等待附件。 要附加调试器,go 回到 VSCode 和 select Python 的活动栏上的运行和调试部分Python: Remote Attach并从下拉菜单中按下。

现在您应该可以在 docker 容器内使用调试器了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM