我一直在尝试在容器中运行一个简单的 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?
我们将非常感谢您的任何建议,并及时满足您对更多信息的请求。