【问题标题】:Django app while dockerizing gives "Starting development server at http://0.0.0.0:8000/" but doesn't show up on browserdockerizing时的Django应用程序给出“在http://0.0.0.0:8000/启动开发服务器”但没有显示在浏览器上
【发布时间】:2021-08-26 07:07:51
【问题描述】:

所以我是 docker 和 Django 的初学者。我这里有一个 django 应用程序,我正在尝试对其进行 dockerize 和运行。我的 requirements.txt 只有 django 和 gunicorn 作为包。

构建并运行 docker 映像后,我在终端中得到以下信息:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
August 26, 2021 - 06:57:22
Django version 3.2.6, using settings 'myproject.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

下面是我的 Dockerfile:

FROM python:3.6-slim

ENV PYTHONUNBUFFERED=1

RUN mkdir /Django

WORKDIR /Django

ADD . /Django

RUN pip install -r requirements.txt

EXPOSE 8000

CMD python manage.py runserver 0.0.0.0:8000 

我使用的命令是:

docker build . -t myproj    

docker run -p 8000:8000 myproj

我尝试在 settings.py 中添加 allowedhosts = ['127.0.0.1'] 但仍然收到“无法访问该站点。127.0.0.1 拒绝连接。 无法看到“恭喜”屏幕。

请帮帮我。

P.s:我用的是windows机器

更新

我尝试运行以下行并得到以下输出:

docker exec 8e6c4e4a58db curl 127.0.0.1:8000

OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"curl\": executable file not found in $PATH": unknown

【问题讨论】:

  • 尝试docker exec myproj curl 127.0.0.1:8000并将结果添加到问题正文中。
  • 你试图访问服务器的 URL 是什么?
  • @M.Rostami 我把它放在最后的问题中
  • @ShashankV 我尝试了127.0.0.1:8000 和 0.0.0.0:8000 但不起作用
  • 您是否尝试过使用容器自己的 IP 地址(默认为 172.17.x.x)访问容器?

标签: python django docker gunicorn wsgi


【解决方案1】:

如果没有您的 settings.py,这可能很难弄清楚。你说你有allowedhosts = ['127.0.0.1'],那绝对没有必要。这实际上可能是阻止您的主机的原因,因为来自您的主机的请求来自不同的 IP 地址。

我制作了以下 Dockerfile,它创建了一个启动项目并运行它

FROM python:latest
RUN python -m pip install Django
RUN django-admin startproject mysite
WORKDIR /mysite
EXPOSE 8000
CMD python manage.py runserver 0.0.0.0:8000

如果我构建它并运行它

docker build -t mysite .
docker run -d -p 8000:8000 mysite

我可以在我的机器上连接到 http://localhost:8000/ 并获取默认页面(我也在 Windows 上)。

我希望这可以帮助您找到您的问题。

PS:你的curl 命令失败是因为你的镜像中没有安装 curl,所以它失败与你的问题无关。

【讨论】:

  • 感谢您的回复。我尝试了您启动的项目代码并尝试运行它,但现在在终端中(使用 vscode)它卡在“使用 StatReloader 监视文件更改”并且当我尝试连接到浏览器上的 localhost 时仍然无法连接。说网站无法访问 localhost 拒绝连接
  • 你可以尝试从命令行而不是从 vscode 运行它吗?您拥有的活动部件越少,就越容易找出问题所在。此外,当您启动容器时,请通过 docker ps 检查它是否正在运行。检查状态是否为“up”并且在“ports”下有0.0.0.0:8000->8000/tcp
  • 尝试使用命令提示符仍然卡在使用 statreloader 监视文件更改。 :( 是的,状态为 up
  • 我刚刚检查了我的日志,它也在监视文件更改。所以这很正常。奇怪的是你不能用http访问它。如果您在 JSON 中的某处执行docker inspect <container>,您会得到一个 IP 地址。对我来说,它是 172.17.0.2。您可以尝试从浏览器转到http://<ip-address>:8000/ 吗?
  • 我试过了,还是不行。 win 10 主场有什么问题吗?我打算在虚拟盒 linux 映像上运行相同的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2023-04-06
  • 2011-04-22
  • 2022-12-17
  • 2019-10-31
  • 2018-12-20
相关资源
最近更新 更多