不要在Docker容器中看到Django

时间:2017-01-18 15:37:02

标签: django docker

我想在一个简单的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

3 个答案:

答案 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应用程序的更多信息(免责声明:我是该网站的创建者)