视频
vscode调试docker里的django
代码:
创建容器映射
docker run --name dockerdjango -v c/Docker/da/app:/app -w /app python:3.11.3-alpine3.17 sh -c "pip install --upgrade pip && pip install Django==4.2 && django-admin startproject app ."
Dockerfile文件需修改为
# Dockerfile是一个文本文件,用于描述如何构建一个Docker镜像。
# FROM python:3.10-slim vscode自动生成的是固定模板
FROM python:3.11.3-alpine3.17
EXPOSE 8000
# Keeps Python from generating .pyc files in the container---阻止 Python 在容器中生成 .pyc 文件
ENV PYTHONDONTWRITEBYTECODE=1
# Turns off buffering for easier container logging----------关闭缓冲以简化容器日志记录
ENV PYTHONUNBUFFERED=1
# Install pip requirements---------------------------------复制django插件文件,然后安装django需要的插件
COPY requirements.txt .
RUN python -m pip install -r requirements.txt
WORKDIR /app
#这个文件的路径是c/docker/da
#需要复制c/docker/da/app文件的内容复制至容器的/app文件夹中,因为不需要其他文件复制到docker容器中
COPY ./app /app
# 创建具有显式 UID 的非 root 用户,并添加访问 /app 文件夹的权限
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app.wsgi"]
requirements.txt文件需要修改为
# 自动生成
# django>=4.1.5
# gunicorn>=20.1.0
# 改为
django>=4.1.5,<4.2
gunicorn>=20.1.0,<20.2
docker-compose.debug.yml文件需要修改为
version: '3.4'
services:
da:
image: da
build:
context: .
dockerfile: ./Dockerfile
command: ["sh", "-c", "pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 manage.py runserver 0.0.0.0:8000 --nothreading --noreload"]
ports:
- 8000:8000
- 5678:5678
.vscode文件夹中的
launch.json文件需要修改为
{
"configurations": [
{
"name": "Docker: Python - Django",
"type": "docker",
"request": "launch",
"preLaunchTask": "docker-run: debug",
"python": {
"pathMappings": [
{
"localRoot": "${workspaceFolder}/app",
"remoteRoot": "/app"
}
],
"projectType": "django"
}
}
]
}
.vscode文件夹中的
tasks.json文件需要修改为
{
"version": "2.0.0",
"tasks": [
{
"type": "docker-build",
"label": "docker-build",
"platform": "python",
"dockerBuild": {
"tag": "da:latest",
"dockerfile": "${workspaceFolder}/Dockerfile",
"context": "${workspaceFolder}",
"pull": true
}
},
{
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": [
"docker-build"
],
"python": {
"args": [
"runserver",
"0.0.0.0:8000",
"--nothreading",
"--noreload"
],
"file": "manage.py"
}
}
]
}
添加da/app/app/views.py文件
from django.http import HttpResponse
def index(request):
print("hello")
ak()
return HttpResponse("hello")
def ak():
print("asdasds")
对da/app/app/urls.py文件进行修改
from django.contrib import admin
from django.urls import path
from app.views import index
urlpatterns = [
path('admin/', admin.site.urls),
path('', index),
]