Docker - 无法访问Django服务器

S. *_*ior 6 python django docker docker-compose

我无法通过容器中的端口连接到django.我正在使用这个地址:0.0.0.0 . :8000,请参阅:http://joxi.ru/Dr8MeGLhkBWnLm .我正在用一个命令创建一个图像和一个容器:'docker-compose up -d'.

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
4fea50856eef        docker_web          "python manage.py ru…"   13 seconds ago      Up 11 seconds       0.0.0.0:8000->8000/tcp   docker_web_1
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yaml

version: '3'

services:
  web:
    build:
      context: .
      dockerfile: /django.testsite/Dockerfile
    ports:
      - "8000:8000"
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM python:3

RUN easy_install pip
RUN pip install django==1.9.12
RUN pip install requests

ADD . /.
WORKDIR /django.testsite

CMD ["python", "manage.py", "runserver", "8000"]
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Jav*_*zzi 11

你的问题:

CMD ["python", "manage.py", "runserver", "8000"]
Run Code Online (Sandbox Code Playgroud)

为了使其工作,您需要将其更改为:

CMD ["python", "manage.py", "runserver", "0.0.0.0", 8000"]
Run Code Online (Sandbox Code Playgroud)

最后,在浏览器中使用http://127.0.0.1:8000/.

为什么?好吧python认为你在127.0.0.1上暴露它,而实际上你想要eth0地址,因为它可以改变,我们不想硬编码它,我们使用0.0.0.0这意味着"所有"接口.

记住docker 127.0.0.1不是你的主机127.0.0.1,每个docker容器都有自己的环回.


为了让它完全发挥作用:

docker-compose down
docker rmi docker_web
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

或.. ..(我喜欢80%确定这是语法)

docker-compose down
docker-compose up -d --rebuild
Run Code Online (Sandbox Code Playgroud)

如果它真的不合作,请查看docker ps -a并确保没有运行.(ps.你可以使用它来摆脱它docker rm <id>;额外的功劳:docker ps -aq | xargs docker rm为你做的一切;))

额外:如果你不想写出来,0.0.0.0你可以简单地写0- 做同样的事情.

  • 感谢您的回答。但我认为 `CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]` 是正确的方法。 (2认同)