我正在一个停靠的容器中开发一个pythondjango应用程序。我已经成功地将远程调试设置为连接到容器内的Django服务器。Me配置如下。你知道吗
启动.json
{
"name": "Remote Django App",
"type": "python",
"request": "attach",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/app"
}
],
"port": 9001,
"host": "localhost"
}
管理.py
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'llf_api.settings')
try:
from django.core.management import execute_from_command_line
from django.conf import settings
if settings.DEBUG:
if os.environ.get('RUN_MAIN') or os.environ.get('WERKZEUG_RUN_MAIN'):
import ptvsd
ptvsd.enable_attach(address=('0.0.0.0', 8001))
print("Attached remote debugger")
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
码头工人-合成.yml
services:
api:
image: ${DOCKER_IMAGE_BASE}:${DOCKER_TAG}
build:
context: .
dockerfile: ./Dockerfile.development
env_file:
- .env
environment:
- DATABASE_URL=postgres://username:password@db/db_name
volumes:
- .:/app
command: >
bash -c "wait-for-it --service db:5432
&& python3 manage.py runserver 0.0.0.0:8000"
ports:
- "9000:8000"
- "9001:8001"
depends_on:
- db
tty: true
stdin_open: true
问题是我在dev container(上面的Dockerfile.development
)中运行VS代码。因此VS代码基本上是在Django服务器正在运行的同一个容器中运行的,这会使我认为需要通过将我的launch.json
设置为以下值来连接到ptvsd
正在运行的本地端口(8001):
启动.json
{
"name": "Local Django App",
"type": "python",
"request": "attach",
"host": "api",
"port": 8001
}
但是这不起作用。当我尝试在VS代码中附加调试器时,它似乎最终会超时。有人知道这是怎么做到的吗?你知道吗
我对VS代码和服务器运行方式的理解是错误的。服务器和VS代码使用的是同一个映像,但不是同一个容器。容器并排运行,因此本地网络对两者都不可用。你知道吗
为了实现这一点,我意识到我需要vscode容器通过在主机上打开的调试端口访问服务器的容器。我知道的唯一方法是使用
docker.for.mac.localhost
作为主机。因此,所有需要从我的原始设置更改的就是launch.json
配置。你知道吗启动.json
VS代码现在连接到端口9001,该端口已在主机上公开,并使用
docker.for.mac.localhost
连接到主机。真管用!你知道吗相关问题 更多 >
编程相关推荐