部署时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
相关产品推荐
相关产品推荐

