![我无法连接到 Docker 容器中的 django(但对 Apache 执行同样的事情)](https://linux22.com/image/1605936/%E6%88%91%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5%E5%88%B0%20Docker%20%E5%AE%B9%E5%99%A8%E4%B8%AD%E7%9A%84%20django%EF%BC%88%E4%BD%86%E5%AF%B9%20Apache%20%E6%89%A7%E8%A1%8C%E5%90%8C%E6%A0%B7%E7%9A%84%E4%BA%8B%E6%83%85%EF%BC%89.png)
我一直在尝试在容器中运行一个简单的 Django 应用程序,然后从浏览器访问它。我在 Google 上搜索并阅读了数十篇解释如何执行此操作的帖子,但没有发现区别,所以我尝试使用 Apache 做同样的事情,结果使用 Apache 运行良好。现在我有一个同时运行两者的容器,我可以访问简单的 Apache 服务器,但不能访问 Django 服务器。Dockerfile 是:
FROM ubuntu:xenial
RUN apt-get update
RUN apt-get install -y python3.5
RUN apt-get install -y python3-pip
RUN alias python=python3.5
RUN echo "alias python=python3.5" >> /root/.bashrc
RUN apt-get install -y vim
RUN pip3 install django
RUN django-admin startproject HelloDjango
RUN cd /HelloDjango
RUN python3.5 /HelloDjango/manage.py makemigrations
RUN python3.5 /HelloDjango/manage.py migrate
RUN apt-get install -y lynx
COPY runscr /HelloDjango/runscr
COPY settings.py /HelloDjango/HelloDjango/settings.py
EXPOSE 81
RUN apt-get install -y apache2
COPY html/* /var/www/html/
WORKDIR /var/www/html
EXPOSE 80
然后我通过以下方式启动容器:
docker run -it -p 1234:81 -p 1235:80 mydjango /bin/bash
进入容器后,我运行:
python3.5 /HelloDjango/manage.py runserver 81 &
apachectl -D FOREGROUND &
然后我使用 lynx 从容器内部进行测试:
lynx http://127.0.0.1:81/
lynx http://127.0.0.1:80/
在这两种情况下,我都能看到我应该看到的内容。当我尝试从浏览器访问这些内容时,问题就出现了。我访问的 URL 是
主机IP:1235
这将返回由 Apache 提供的简单页面,并且
主机IP:1234
显示“无法连接”我使用 Firefox、IE、Chrome 和 Edge 得到了相同的结果。我还在 Django 和 Apache 之间交换了 80 和 81。
Django 和 Apache 之间有什么不同,以至于绑定端口的相同步骤适用于 Apache,而不适用于 Django?
我们将非常感谢您的任何建议,并及时满足您对更多信息的请求。