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

Docker端口转发失效:容器化Django应用无法外部访问

容器化Django应用外部无法访问的排查与解决

问题场景

本地非容器环境下Django应用运行正常,容器化构建镜像并启动容器后,无法通过http://localhost:8081访问,但进入容器内部执行curl localhost:8005可正常获取响应;同时运行Nginx容器docker run -d -p 8009:80 nginx:alpine可正常访问,说明端口映射本身无问题。

Dockerfile内容:

FROM python:3.11
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
COPY requirements.txt /app
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY . /app
EXPOSE 8005
#ENTRYPOINT ["bash", "entrypoint.bash"]
CMD ["python", "manage.py", "runserver", "0.0.0.0:8005"]

构建及运行命令:

docker build -t app_backend:v1 .
docker run -dit --rm -p 8081:8005 --name app_backend app_backend:v1

排查与解决步骤

1. 检查Django的ALLOWED_HOSTS配置

这是容器化Django最常见的外部访问问题。容器内curl localhost:8005能正常响应,是因为请求的Host头为localhost,属于Django默认允许的主机;但外部通过localhost:8081访问时,请求的Host头可能是localhost:8081或者宿主机IP,若未在ALLOWED_HOSTS中配置,Django会返回400错误。

修改项目根目录下的settings.py:

# 开发环境可临时设置为*,生产环境需指定具体域名/IP
ALLOWED_HOSTS = ['*']

重新构建镜像并启动容器,再次测试访问。

2. 确认容器内服务监听地址

虽然Dockerfile的CMD指定了0.0.0.0:8005,但需确认进程实际监听的是0.0.0.0而非127.0.0.1(127.0.0.1仅允许容器内部访问)。

进入容器执行:

netstat -tulpn | grep 8005

若输出显示127.0.0.1:8005,说明服务未绑定到0.0.0.0,需检查是否有其他配置覆盖了CMD的启动参数,比如entrypoint脚本、manage.py中的硬编码,或者Django的BIND_ADDRESS相关设置。

3. 检查宿主机端口与防火墙

  • 确认宿主机8081端口未被占用:
    Linux/macOS执行:

    lsof -i :8081
    

    Windows执行:

    netstat -ano | findstr :8081
    

    若有其他进程占用,需停止该进程或更换映射端口。

  • 检查宿主机防火墙是否允许8081端口的入站请求:
    Ubuntu/Debian:

    sudo ufw allow 8081
    

    CentOS/RHEL:

    sudo firewall-cmd --add-port=8081/tcp --permanent
    sudo firewall-cmd --reload
    

    Windows需在防火墙高级设置中添加8081端口的入站规则。

4. 直接通过容器IP测试访问

获取容器IP:

docker inspect app_backend | grep -A 2 "IPAddress"

在宿主机访问http://<容器IP>:8005:

  • 若能访问:说明端口映射环节可能存在问题,可尝试重启Docker服务后重新启动容器。
  • 若不能访问:说明容器内服务虽监听0.0.0.0,但可能存在其他网络限制,需检查容器的网络模式(默认bridge模式是否正常)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:39:52