Docker Compose可编译Django项目但无法访问本地HTTPS链接
解决Docker容器中Django HTTPS开发服务无法访问的问题
核心修复步骤
1. 修改服务绑定地址
容器内的runserver_plus默认绑定127.0.0.1,仅容器内部可访问,需改为绑定0.0.0.0以允许外部主机连接:
更新docker-compose.yml的command字段:
command: python manage.py runserver_plus 0.0.0.0:8000 --cert-file cert.pem --key-file key.pem
2. 配置Django允许访问的主机
Django默认限制主机访问,需在settings.py中添加允许的主机(开发环境可简化配置):
ALLOWED_HOSTS = ['0.0.0.0', '127.0.0.1', 'localhost'] # 开发环境临时简化:ALLOWED_HOSTS = ['*']
3. 确保SSL证书可被容器读取
- 若本地已生成
cert.pem和key.pem,需将文件放在项目根目录(与docker-compose.yml同目录),通过已配置的volumes: - .:/usr/src/app,容器会自动挂载这些文件到工作目录。 - 若容器内无证书,
runserver_plus启动时会自动生成,首次启动需等待片刻完成证书创建。
4. 验证端口与网络
- 检查本地端口
8000是否被占用:Linux/macOS用lsof -i :8000,Windows用netstat -ano | findstr :8000,占用则更换端口(如docker-compose.yml中改为"8001:8000",访问时用https://127.0.0.1:8001)。
修正后的完整配置示例
docker-compose.yml
version: "3.8" services: django: build: . container_name: frontend command: python manage.py runserver_plus 0.0.0.0:8000 --cert-file cert.pem --key-file key.pem volumes: - .:/usr/src/app ports: - "8000:8000" depends_on: - pgdb pgdb: image: postgres container_name: backend environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres
settings.py(新增ALLOWED_HOSTS)
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'location', 'rest_framework', 'django_extensions', ] ALLOWED_HOSTS = ['0.0.0.0', '127.0.0.1']
修改完成后,执行docker-compose down && docker-compose up --build,即可通过https://127.0.0.1:8000访问容器内的Django服务。
内容的提问来源于stack exchange,提问作者user124e
相关产品推荐
相关产品推荐

