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

部署时Django与Nginx容器连接异常:本地正常拉取镜像后失效

问题诊断与解决方案

核心问题:Nginx镜像未包含自定义配置文件

本地运行时,Nginx容器通过volumes: - ./config/nginx/conf.d:/etc/nginx/conf.d挂载了本地配置目录,因此能加载local.conf实现反向代理。但你上传到Docker Hub的colurw/chess_nn:nginx镜像,只是直接基于pagespeed/nginx-pagespeed:latest基础镜像,没有将自定义Nginx配置文件打包到镜像中。部署时未挂载本地配置目录,Nginx使用默认配置,自然显示欢迎页面,不会转发请求到Django容器。

修复步骤

1. 为Nginx创建专属Dockerfile

在项目根目录新建Dockerfile.nginx,内容如下:

FROM pagespeed/nginx-pagespeed:latest

# 将本地Nginx配置文件复制到容器对应目录
COPY ./config/nginx/conf.d/local.conf /etc/nginx/conf.d/

# 验证配置合法性(可选)
RUN nginx -t
CMD ["nginx", "-g", "daemon off;"]

2. 修改本地构建用的docker-compose.yml

更新Nginx服务配置,改为通过Dockerfile构建,移除本地配置挂载:

version: '3'

services:
  djangoapp:
    build: .
    volumes:
      - .:/opt/services/djangoapp/src
    networks:
      - nginx_network

  nginx:
    # 改为构建自定义Nginx镜像
    build:
      context: .
      dockerfile: Dockerfile.nginx
    ports:
      - 80:80
    depends_on:
      - djangoapp
    networks:
      - nginx_network

networks:
  nginx_network:
    driver: bridge

3. 重新构建并推送镜像

# 构建镜像
docker-compose build

# 为镜像打标签
docker tag chess_nn_webapp-djangoapp colurw/chess_nn:webapp
docker tag chess_nn_webapp-nginx colurw/chess_nn:nginx

# 推送到Docker Hub
docker push colurw/chess_nn:webapp
docker push colurw/chess_nn:nginx

4. 重新运行部署版容器

执行docker-compose -f docker-compose_deploy.yml up,此时Nginx容器会加载镜像内的local.conf,正确将请求转发到Django容器。

额外验证点

  • 检查Django镜像代码完整性:本地构建时的COPY . /opt/services/djangoapp/src已将代码复制进镜像,部署时无volume挂载,需确保镜像内代码为最新版本。
  • 验证Nginx配置:进入运行中的Nginx容器,执行cat /etc/nginx/conf.d/local.conf确认配置存在,执行nginx -t检查配置合法性。
  • 测试容器间连通性:在Nginx容器内执行curl djangoapp:80,确认能访问Django服务,验证网络连通正常。

内容的提问来源于stack exchange,提问作者colin.urwin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:10:55