我想在一个简单的Docker容器中运行Django。
首先,我用Docker文件构建了我的容器。它没有任何特殊之处(只有FROM,RUN和COPY命令)
然后我用命令
运行我的容器docker run -tid -p 8000:8000 --name <container_name> <image>
输入我的容器:
docker exec -it <container_name> bash
Ran Django服务器:
python manage.py runserver
GOT:
Starting development server at http://127.0.0.1:8000/
但是当我去127.0.0.1:8000时,我什么都看不见:
The 127.0.0.1 page isn’t working
没有Nginx或其他工作服务器。
我做错了什么?
更新1(Dockerfile)
FROM ubuntu:16.04
MAINTAINER Max Malyshev <user>
COPY . /root
WORKDIR /root
RUN apt-get update
RUN apt-get install python-pip -y
RUN apt-get install postgresql -y
RUN apt-get install rabbitmq-server -y
RUN apt-get install libpq-dev python-dev -y
RUN apt-get install npm -y
RUN apt-get install mongodb -y
RUN pip install -r requirements.txt
答案 0 :(得分:4)
问题是您将开发服务器暴露给Docker容器内的127.0.0.1
,而不是主机操作系统。
如果您访问容器的另一个控制台并向127.0.0.1:8000
发送http请求,它将起作用。
关键是要确保Docker容器将开发服务器暴露给所有IPv4地址,您可以使用0.0.0.0
代替127.0.0.1
来执行此操作。
尝试运行以下命令来启动Django开发服务器:
python manage.py runserver 0.0.0.0:8000
另外,为了获得更多灵感,您可以查看这个有效的Dockerfile,以便使用内置开发服务器https://github.com/Niklas9/django-unixdatetimefield/blob/master/Dockerfile托管Django应用程序。
答案 1 :(得分:0)
您需要在Dockerfile中公开端口8000并运行像gunicorn这样的WSGI服务器。如果您按照此处的步骤操作,那么您应该感觉良好...... https://semaphoreci.com/community/tutorials/dockerizing-a-python-django-web-application
答案 2 :(得分:0)
我同意Niklaus9的评论。如果我可以建议增强尝试
python manage.py runserver [::]:8000
区别在于[::]支持ipv6地址。
我也注意到mongodb的一些包。如果您想在本地测试和开发,可以在部署到dev / stage / prod环境之前创建docker容器并使用docker compose在您的机器上测试您的应用程序。
您可以在本教程http://programmathics.com/programming/docker/docker-compose-for-django/上找到有关如何在docker中设置链接到数据库后端的Django应用程序的更多信息(免责声明:我是该网站的创建者)