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

Docker部署第二个Django+Apache应用绑定8006端口无法访问求解

问题核心原因梳理

  1. 基础镜像冲突:你使用httpd:latest作为基础镜像,该镜像为官方编译的Apache版本,配置路径位于/usr/local/apache2/,但你后续安装的是Debian系的apache2软件包,配置路径为/etc/apache2/,二者路径不匹配导致你修改的Apache配置未被加载。
  2. 镜像缓存残留:从容器运行状态可以看到0.0.0.0:8006->80006/tcp的异常映射,说明你启动的是旧缓存版本的镜像,新的配置没有被构建到镜像中。
  3. 站点未显式启用:你将站点配置放在/etc/apache2/sites-available/目录下,但没有执行a2ensite命令启用该配置,Apache默认不会加载该目录下的未启用站点。
  4. 冗余配置:demo-site.conf中重复写了两次static目录权限配置,属于无效冗余。

认知纠正

你关于端口的认知部分正确:宿主机的同一个端口不能同时绑定多个容器,但每个容器有独立的网络命名空间,所以多个容器内部可以同时监听80端口,只要宿主机映射的外部端口不同即可。你也可以把第二个应用的配置改成容器内监听80、宿主机映射8006:80,和第一个应用的配置逻辑保持一致,反而降低出错概率。

可行解决方案

步骤1:修复Dockerfile

将你的Dockerfile替换为以下内容:

# 改用Ubuntu作为基础镜像,避免Apache路径冲突
FROM ubuntu:22.04

# 禁用apt交互提示
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update
RUN apt-get install -y apt-utils vim curl apache2 apache2-utils
RUN apt-get -y install python3 libapache2-mod-wsgi-py3
RUN ln /usr/bin/python3 /usr/bin/python
RUN apt-get -y install python3-pip
RUN ln /usr/bin/pip3 /usr/bin/pip
RUN pip install --upgrade pip
RUN pip install django ptvsd
# 先禁用默认站点
RUN a2dissite 000-default.conf
ADD ./demo_site.conf /etc/apache2/sites-available/000-default.conf
# 显式启用你的站点配置
RUN a2ensite 000-default.conf
ADD ./GSTDP_Develop /var/www/html/GSTDP_Develop
RUN chown -R www-data:www-data /var/www/html/GSTDP_Develop
RUN a2enmod wsgi
RUN pip install -r /var/www/html/GSTDP_Develop/requirements.txt
RUN python /var/www/html/GSTDP_Develop/manage.py collectstatic --noinput
EXPOSE 8006
CMD ["apache2ctl", "-D", "FOREGROUND"]

步骤2:修复demo-site.conf

删除重复的static目录配置,修正后的配置如下:

WSGIPythonPath /var/www/html/GSTDP_Develop

Listen 8006
<VirtualHost *:8006>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/GSTDP_Develop
        WSGIApplicationGroup %{GLOBAL}
        Alias /static /var/www/html/GSTDP_Develop/src/static
        <Directory /var/www/html/GSTDP_Develop/static>
                Require all granted
        </Directory>

        WSGIScriptAlias / /var/www/html/GSTDP_Develop/src/wsgi.py
        <Directory /var/www/html/GSTDP_Develop/src>
                <Files wsgi.py>
                Require all granted
                </Files>
        </Directory>

        WSGIDaemonProcess GSTDP_Develop processes=2 threads=6 display-name=gst-dna

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

步骤3:清理旧资源重新构建

执行以下命令清理旧的镜像容器,避免缓存影响:

# 停掉旧容器
docker stop sharp_keldysh test-app
# 删除旧容器
docker rm sharp_keldysh test-app
# 删除旧镜像
docker rmi test-app
# 重新构建启动
docker-compose up -d --build

步骤4:验证访问

  1. 先在宿主机本地测试是否能通:curl http://127.0.0.1:8006
  2. 如果本地能访问但外部无法访问,执行以下命令开放防火墙端口:
ufw allow 8006/tcp
ufw reload

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:54:03