You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Docker容器内的Django应用暴露至公网IP?

你的Django容器公网暴露配置检查与补充环节

首先,你当前的gunicorn启动命令是没问题的:

exec gunicorn --bind 0.0.0.0:${PORT:-8000} --timeout 120 wtools2.wsgi:application

绑定0.0.0.0确保容器内的服务能接收来自外部的请求,端口用环境变量也很灵活,这部分是正确的。但要让公网能正常访问,还需要补充以下关键操作:

  • Docker Compose端口映射配置
    必须在docker-compose.yml里添加端口映射,把容器内的端口(比如默认8000)映射到宿主机的端口,示例配置:

    services:
      your-django-service:
        # 其他配置(build、volumes等)
        ports:
          - "80:8000"  # 宿主机80端口映射到容器8000端口,外部用公网IP直接访问
          # 或者用 "8000:8000",外部访问公网IP:8000
    

    没有这一步,宿主机的公网IP无法把请求转发到容器内部。

  • 服务器防火墙/安全组放行端口

    • Linux服务器本地防火墙:如果用ufw,执行ufw allow 80(或者你映射的端口);如果用iptables,添加对应端口的放行规则。
    • 云服务器安全组:如果是阿里云、AWS等云主机,必须在控制台的安全组规则里,允许外部访问你映射的端口(比如80、8000),来源设置为0.0.0.0/0(公网所有IP)。
  • Django ALLOWED_HOSTS配置
    修改Django项目的settings.py,把你的公网IP、域名(如果有)加入ALLOWED_HOSTS:

    ALLOWED_HOSTS = ['xxx.xxx.xxx.xxx', 'your-domain.com']
    

    生产环境不要用ALLOWED_HOSTS = ['*'],会有安全风险。如果不配置,Django会拒绝来自公网IP的请求,返回400错误。

  • 生产环境优化建议
    直接用gunicorn暴露到公网不是最佳实践,建议搭配Nginx做反向代理:

    • Nginx负责处理静态文件(Django的collectstatic生成的文件)、SSL证书(用Let's Encrypt免费证书开启HTTPS)、请求转发到gunicorn。
    • 示例Nginx配置可以监听80/443端口,把请求转发到localhost:8000(对应宿主机映射的端口)。
  • 敏感信息管理
    确保Django的SECRET_KEY、数据库连接信息等敏感内容,通过Docker Compose的environment字段或者.env文件注入,不要硬编码到代码里,避免泄露。

内容的提问来源于stack exchange,提问作者Usman Rafiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:15:12