VS Code 运行 并使用 docker-compose 在 Docker 中调试 Python
VS Code run and debug Python in Docker using docker-compose
为易于使用的环境配置 VS Code。我想要一个简单的方法来在 Docker 中启动 Python 脚本并附加调试器。
我有什么工作好:
- 已创建 Docker 文件并 docker-compose.yaml 到 运行 docker-撰写|开始正确。
- 我可以附加到 运行ning docker 容器并调试我的代码。
我想得到什么?
一次启动和附加一个按钮。
我需要使用 docker-compose 启动应用程序。我不想在 VS Code 中配置 docker-运行 任务。
我的代码和想法:
Docker文件:
FROM python:3.6-alpine
RUN mkdir -p /work/
WORKDIR /work/
COPY ./python/requirements.txt ./requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
COPY ./python/src/ .
CMD python -m ptvsd --host 0.0.0.0 --port 5678 --wait run.py < tests/input.txt > tests/output.txt
docker-compose.yaml
version: "3.7"
services:
py-service:
container_name: py-container
image: py-image
build:
context: ./
volumes:
- ./python/src/:/work
ports:
- 5678:5678
launch.json 配置:
{ // simple attach to running container - works good
"name": "Python Attach",
"type": "python",
"request": "attach",
"pathMappings": [
{
"localRoot": "${workspaceFolder}/python/src/",
"remoteRoot": "/work/"
}
],
"port": 5678,
"host": "127.0.0.1"
},
{ // launch docker container and attach to debugger - NOT works
"name": "Run Py in Docker",
"type": "docker",
"request": "launch",
"platform": "python",
"preLaunchTask": "docker-compose-start",
"python": {
"pathMappings": [
{
"localRoot": "${workspaceFolder}/python/src/",
"remoteRoot": "/work/"
}
],
"projectType": "general",
"host": "127.0.0.1",
"port": 5678,
},
},
tasks.json 到 运行 docker-编写命令
{
"label": "docker-compose-start",
"type": "shell",
"command": "docker-compose up"
},
问题是 Docker 中的 运行 Py 的执行正常启动我的容器,但无法附加调试器并超时失败.虽然容器仍在 运行ning 并等待附件。这能以某种方式解决吗?
更新
我终于可以启动和调试了!这是我的 task.json:
{
"label": "docker-compose-start",
"type": "shell",
"command": "docker-compose up --build -d",
"isBackground": true,
"problemMatcher": [
{
"pattern": [{ "regexp": ".", "file": 1, "location": 2, "message": 3, }],
"background": {
"activeOnStart": true,
"beginsPattern": "^(Building py-service)$",
"endsPattern": "^(Creating|Recreating|Starting) (py-container) ... (done)$",
}
},
],
},
launch.json:
{
"name": "run py",
"type": "python",
"request": "attach",
"preLaunchTask": "docker-compose-start",
"pathMappings": [
{
"localRoot": "${workspaceFolder}/python/src/",
"remoteRoot": "/work/"
}
],
"port": 5678,
"host": "127.0.0.1"
},
毕竟,将所有 docker up|build 输出显示到问题中让我感到不便。 VS Code 每次都要求继续,但 Enter 有帮助。
docker-compose up
是前台启动(stdin捕获,stdout打印...和等待退出command/signal)
对于你的情况,更合适的是后台启动(`docker compose up -d',参见 d(detached) flag)。此命令启动容器并将控制权交给下一个命令(附加)。
更新:
如果后台 运行ning 没有帮助,请尝试 运行 在后台 和 .
我按照自己的方式做的:
- 使用 Theia 创建了一个 docker 图像 - browser-based 版本的 VS-code,
- 安装了我经常使用的大多数常见 Linux 和 python 软件包,
- 添加了一个 browser-based 终端、调度程序。
现在只需一个简单的 docker 运行 命令即可启动就绪环境。我open-sourced它https://github.com/bluxmit/alnoda-workspaces/tree/main/workspaces/python-workspace.
为易于使用的环境配置 VS Code。我想要一个简单的方法来在 Docker 中启动 Python 脚本并附加调试器。
我有什么工作好:
- 已创建 Docker 文件并 docker-compose.yaml 到 运行 docker-撰写|开始正确。
- 我可以附加到 运行ning docker 容器并调试我的代码。
我想得到什么?
一次启动和附加一个按钮。
我需要使用 docker-compose 启动应用程序。我不想在 VS Code 中配置 docker-运行 任务。
我的代码和想法:
Docker文件:
FROM python:3.6-alpine
RUN mkdir -p /work/
WORKDIR /work/
COPY ./python/requirements.txt ./requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
COPY ./python/src/ .
CMD python -m ptvsd --host 0.0.0.0 --port 5678 --wait run.py < tests/input.txt > tests/output.txt
docker-compose.yaml
version: "3.7"
services:
py-service:
container_name: py-container
image: py-image
build:
context: ./
volumes:
- ./python/src/:/work
ports:
- 5678:5678
launch.json 配置:
{ // simple attach to running container - works good
"name": "Python Attach",
"type": "python",
"request": "attach",
"pathMappings": [
{
"localRoot": "${workspaceFolder}/python/src/",
"remoteRoot": "/work/"
}
],
"port": 5678,
"host": "127.0.0.1"
},
{ // launch docker container and attach to debugger - NOT works
"name": "Run Py in Docker",
"type": "docker",
"request": "launch",
"platform": "python",
"preLaunchTask": "docker-compose-start",
"python": {
"pathMappings": [
{
"localRoot": "${workspaceFolder}/python/src/",
"remoteRoot": "/work/"
}
],
"projectType": "general",
"host": "127.0.0.1",
"port": 5678,
},
},
tasks.json 到 运行 docker-编写命令
{
"label": "docker-compose-start",
"type": "shell",
"command": "docker-compose up"
},
问题是 Docker 中的 运行 Py 的执行正常启动我的容器,但无法附加调试器并超时失败.虽然容器仍在 运行ning 并等待附件。这能以某种方式解决吗?
更新
我终于可以启动和调试了!这是我的 task.json:
{
"label": "docker-compose-start",
"type": "shell",
"command": "docker-compose up --build -d",
"isBackground": true,
"problemMatcher": [
{
"pattern": [{ "regexp": ".", "file": 1, "location": 2, "message": 3, }],
"background": {
"activeOnStart": true,
"beginsPattern": "^(Building py-service)$",
"endsPattern": "^(Creating|Recreating|Starting) (py-container) ... (done)$",
}
},
],
},
launch.json:
{
"name": "run py",
"type": "python",
"request": "attach",
"preLaunchTask": "docker-compose-start",
"pathMappings": [
{
"localRoot": "${workspaceFolder}/python/src/",
"remoteRoot": "/work/"
}
],
"port": 5678,
"host": "127.0.0.1"
},
毕竟,将所有 docker up|build 输出显示到问题中让我感到不便。 VS Code 每次都要求继续,但 Enter 有帮助。
docker-compose up
是前台启动(stdin捕获,stdout打印...和等待退出command/signal)
对于你的情况,更合适的是后台启动(`docker compose up -d',参见 d(detached) flag)。此命令启动容器并将控制权交给下一个命令(附加)。
更新:
如果后台 运行ning 没有帮助,请尝试 运行 在后台 和
我按照自己的方式做的:
- 使用 Theia 创建了一个 docker 图像 - browser-based 版本的 VS-code,
- 安装了我经常使用的大多数常见 Linux 和 python 软件包,
- 添加了一个 browser-based 终端、调度程序。
现在只需一个简单的 docker 运行 命令即可启动就绪环境。我open-sourced它https://github.com/bluxmit/alnoda-workspaces/tree/main/workspaces/python-workspace.