我在将 VS Code 调试器集成到我的 Docker 项目中时遇到问题。
关于我的项目,它不是我做的,所以正如我之前进入的那样,我在 Docker 方面面临一些挑战,但也在学习。我们使用这个命令来访问本地主机:
docker-compose -f docker-compose.dev.yml up -d
这是 docker-compose.dev,这里是文件:
/.vscode
/config
/example_app
...
.dockerignore
.gitignore
docker-compose.dev #The one who we up
这就是文件
volumes:
postgres_data_test: {}
hashes: {}
product_api_root: {}
services:
postgres:
image: postgres:10
volumes:
- postgres_data_test:/var/lib/postgresql/data
- ./backups:/backups
ports:
- "8889:5432"
environment:
- POSTGRES_USER=example
- POSTGRES_PASSWORD=example
django:
build:
context: .
dockerfile: Dockerfile.dev
command: python /app/manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
- hashes:/hashes
- product_api_root:/product-api-root
ports:
- "8000:8000"
environment:
- POSTGRES_USER=example
- POSTGRES_PASSWORD=example
- DATABASE_URL=postgres://example:example@postgres:5432/example
- REDIS_URL=redis://redis:6379/0
- DJANGO_SETTINGS_MODULE=config.settings.local
depends_on:
- postgres
- redis
redis:
image: redis:6.2.6
我一直在尝试两种选项来调试它
这是 VS Code 本身记录的一个,它在
tasks.json
文件夹中配置 launch.json
和 .vscode
:
供参考:https://code.visualstudio.com/docs/containers/debug-python
这是我尝试过的
launch.json
(我尝试了很多,但这是最后一个,我之前尝试过的其他也不起作用):
{
"version": "0.2.0",
"configurations": [
{
"name": "Docker: Python - Django",
"type": "python",
"request": "attach",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/app"
}
],
"port": 8000,
"host": "localhost",
"preLaunchTask": "docker-compose up",
"postDebugTask": "docker-compose down",
"justMyCode": false,
"django": true
}
]
}
这是
launch.json
:
{
"version": "2.0.0",
"tasks": [
{
"label": "docker-compose up",
"type": "shell",
"command": "docker-compose up",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
但是当我尝试通过单击 F5 使用调试器时,出现错误:
The preLaunchTask 'docker-compose up' terminated with exit code 1.
这也发生在我之前的尝试中。
我尝试使用扩展远程容器或开发容器。
我打开我的项目
我尝试附加 Django 容器
打开一个新窗口
我尝试打开我的项目文件夹
无限加载
我还尝试打开一个新的没有文件夹的 VS Code 窗口:
单击 F1 并“打开容器中的文件夹”
尝试打开我的项目文件夹
收到错误“工作空间不存在”
供参考:https://code.visualstudio.com/docs/devcontainers/containers
所以,我可以使用其中任何一个,我只需要一个有效的。
检查发生情况的一种简单方法是运行
docker exec -it $(docker ps | awk '/django/{print $1}') bash
以进入 Django 容器。花点时间理解这个命令,不要盲目复制/粘贴(docker exec 文档)。如果此命令失败,请使用 docker ps
检查容器的状态,它可能尚未启动。
docker exec -it CONTAINER_ID bash
将允许您在现有容器内运行任意命令。因此,您将能够检查您想要的任何内容。例如,使用 ls -la
,您将能够查看 Dockerfile
是否按预期工作。您还可以访问 Django / Gunicorn 日志等。
旁注,您可能希望运行
docker-compose -f docker-compose.dev.yml up
而无需最后的 -d
在前台运行容器(参见 docker compose 文档):这样会更容易发现任何错误。
下面链接中提到的以下步骤应该允许您调试远程 django 应用程序 https://dev.to/ferkarchiloff/how-to-debug-django-inside-a-docker-container-with-vscode-4ef9