当前位置: 首页 > 知识库问答 >
问题:

为django应用程序公开容器端口

高夜洛
2023-03-14

当我在本地运行django应用程序时,它工作正常,但当我在容器上运行它时,它不工作。这是港口问题吗?当我把它作为本地应用程序运行(没有docker)时,我把它指向localhost:8000/polls,它就像一个魅力。但是我发现,“localhost页面不工作。当我运行容器时,localhost没有发送任何数据。ERR_EMPTY_RESPONSE”。该应用程序基本上与Django教程一字不差https://docs.djangoproject.com/en/1.10/intro/tutorial01/

O/S Windows 10
Python 3.6
Docker 17.03.0-ce

更新以包括docker检查输出(容器ip地址也不起作用):

C:\Users\jonathan

Dockerfile:

FROM python:3.6
EXPOSE 8000
COPY ./ /usr/src/
RUN pip install -r /usr/src/requirements.txt
RUN pip install /usr/src/django-polls/dist/django-polls-0.1.tar.gz
CMD python /usr/src/toplevel/manage.py runserver 

运行容器(没有明显的问题):

C:\temp\djangopoc>docker run -p 8000:8000 -t django-polls
Performing system checks...
System check identified no issues (0 silenced).
March 21, 2017 - 01:05:05
Django version 1.10.6, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

疑难解答信息?(注意端口显示为0.0.0.0:8000)问题?:

C:\temp\djangopoc>docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
d28b7c336664        django-polls        "/bin/sh -c 'pytho..."   About an hour ago   Up About an hour    0.0.0.0:8000->8000/tcp   xenodochial_boyd

如果它有助于诊断、构建说明和输出:

C:\temp\djangopoc>docker build -t django-polls:latest .
Sending build context to Docker daemon 4.948 MB
Step 1/6 : FROM python:3.6
3.6: Pulling from library/python
Digest: sha256:438208801c4801efbf8b0e318ff6548460b27bd1fbcb7bb188273d13871ab43f
Status: Downloaded newer image for python:3.6
 ---> a1782fa44ef7
Step 2/6 : EXPOSE 8000
 ---> Running in cde33b9d347d
 ---> 34ebaa1cfd3c
Removing intermediate container cde33b9d347d
Step 3/6 : COPY ./ /usr/src/
 ---> a6b591e2fd0b
Removing intermediate container e45a71d06c9a
Step 4/6 : RUN pip install -r /usr/src/requirements.txt
 ---> Running in 9d995a9129fb
Collecting appdirs==1.4.2 (from -r /usr/src/requirements.txt (line 1))
...
Collecting numpy>=1.7.0 (from pandas==0.19.2->-r /usr/src/requirements.txt (line 23))
  Downloading numpy-1.12.1-cp36-cp36m-manylinux1_x86_64.whl (16.8MB)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/site-packages (from pyramid==1.8.2->-r /usr/src/requirements.txt (line 28))
Installing collected packages: appdirs, six, python-dateutil, arrow, docutils, colorama, PyYAML, jmespath, botocore, s3transfer, pyasn1, rsa, awscli, chardet, binaryornot, click, MarkupSafe, Jinja2, jinja2-time, whichcraft, poyo, future, cookiecutter, decorator, Django, funcsigs, hupper, mysql-connector, pyparsing, packaging, pytz, numpy, pandas, PasteDeploy, zope.deprecation, translationstring, WebOb, venusian, zope.interface, repoze.lru, pyramid
  Running setup.py install for arrow: started
    Running setup.py install for arrow: finished with status 'done'
  Running setup.py install for PyYAML: started
    Running setup.py install for PyYAML: finished with status 'done'
...
  Running setup.py install for repoze.lru: started
    Running setup.py install for repoze.lru: finished with status 'done'
Successfully installed Django-1.10.6 Jinja2-2.9.5 MarkupSafe-0.23 PasteDeploy-1.5.2 PyYAML-3.12 WebOb-1.7.1 appdirs-1.4.2 arrow-0.10.0 awscli-1.11.55 binaryornot-0.4.0 botocore-1.5.18 chardet-2.3.0 click-6.7 colorama-0.3.7 cookiecutter-1.5.1 decorator-4.0.11 docutils-0.13.1 funcsigs-1.0.2 future-0.16.0 hupper-0.4.2 jinja2-time-0.2.0 jmespath-0.9.1 mysql-connector-2.1.4 numpy-1.12.1 packaging-16.8 pandas-0.19.2 poyo-0.4.0 pyasn1-0.2.3 pyparsing-2.1.10 pyramid-1.8.2 python-dateutil-2.6.0 pytz-2016.10 repoze.lru-0.6 rsa-3.4.2 s3transfer-0.1.10 six-1.10.0 translationstring-1.3 venusian-1.0 whichcraft-0.4.0 zope.deprecation-4.2.0 zope.interface-4.3.3
 ---> dbc28b5002d5
Removing intermediate container 9d995a9129fb
Step 5/6 : RUN pip install /usr/src/django-polls/dist/django-polls-0.1.tar.gz
 ---> Running in 27d40c4a746a
Processing /usr/src/django-polls/dist/django-polls-0.1.tar.gz
Installing collected packages: django-polls
  Running setup.py install for django-polls: started
    Running setup.py install for django-polls: finished with status 'done'    
Successfully installed django-polls-0.1
 ---> 1771f5ff2479
Removing intermediate container 27d40c4a746a
Step 6/6 : CMD python /usr/src/toplevel/manage.py runserver
 ---> Running in d754737737ec
 ---> 18be11864bbd
Removing intermediate container d754737737ec
Successfully built 18be11864bbd
SECURITY WARNING: You are building a Docker image from Windows against a
 non-Windows Docker host. All files and directories added to build context
 will have '-rwxr-xr-x' permissions. It is recommended to double check and
 reset permissions for sensitive files and directories.

共有3个答案

赫连冠玉
2023-03-14

也许您可以尝试使用以下命令:

CMD python /usr/src/toplevel/manage.py runserver 0.0.0.0:8000

【参考文献1】0.0.0、127.0.0.1和localhost之间有什么区别?

司徒宇
2023-03-14

您是否尝试过查看运行django应用程序的容器内部的日志?要进入容器,请使用docker exec-it django-投票bash

甄文彬
2023-03-14

在docker机器上运行应用程序时,应该使用docker机器ip,而不是localhost

使用:docker machine ip default获取docker machine ip,其中default是您的机器

 类似资料:
  • 我正在docker容器中运行react样板应用程序,托管Azure Web应用程序容器。 在本地,我通过以下方式启动应用程序: 我的docker文件如下所示: 应用程序设置 我尝试过用键/值对编辑应用程序设置,但没有效果: 显然Azure只为入站流量公开端口80和443: 80:应用程序服务环境中应用程序服务计划中运行的应用程序的入站HTTP流量的默认端口。在启用ILB的ASE上,此端口绑定到AS

  • 问题内容: 当使用GitLab CI以及时,我无法获取内部启动的Docker容器以将其端口暴露给“主机”,即构建在其中运行的Docker映像。 我的档案: 我的命令: 输出: 我在这里做错了什么? 原始问题后继-上面是一个简短,易于测试的示例 我有一个监听端口的应用程序映像。它的启动和配置是通过进行管理的,并且可以在我的本地计算机上正常使用-我可以毫无问题地进行访问。 但是,通过共享运行程序在Gi

  • 我正在尝试创建一个Docker容器,它的作用就像一个完整的虚拟机。我知道我可以使用Dockerfile中的EXPOSE指令来公开端口,并且我可以使用标志和来分配端口,但是一旦容器实际运行,是否有命令来实时打开/映射其他端口? 例如,假设我有一个正在运行sshd的Docker容器。另一个使用容器SSH的人安装了httpd。有没有一种方法可以公开容器上的端口80,并将其映射到主机上的端口8080,这样

  • 问题内容: 我正在尝试创建一个行为像完整虚拟机的Docker容器。我知道我可以在Dockerfile中使用EXPOSE指令公开端口,并且可以使用标志来分配端口,但是一旦容器实际运行,是否有命令打开/映射其他端口? 例如,假设我有一个运行sshd的Docker容器。有人使用ssh容器安装了httpd。有没有办法公开容器上的端口80并将其映射到主机上的端口8080,以便人们可以访问容器中运行的Web服

  • 我已经创建了一个非常简单的discord机器人,并试图在azure上托管它。当我在本地运行它时,它工作得很好。当我部署它时,它可以正常工作一段时间,然后崩溃并重新启动。 我明白了 我没有设置docker,所以我猜azure是为我做的。 我的包裹是这样的 我的代码是这样的。 有人知道解决办法吗?

  • 问题内容: 我要做的是为我的Java应用程序构建一个docker映像,但是以下注意事项对于大多数编译语言都应适用。 在构建服务器上,我想为应用程序生成一个docker映像作为可交付成果。为此,我必须使用一些构建工具(通常是Gradle,Maven或Ant)来编译应用程序,然后将创建的JAR文件添加到docker映像中。因为我希望Docker映像仅执行JAR文件,所以我当然将从已安装Java的基本映