Docker无法访问主机上的Web服务器

我正在尝试在dockerized环境中设置python django

Dockerfile

FROM python:3.5-slim ENV PYTHONUNBUFFERED 1 RUN mkdir /code RUN pip install --upgrade pip WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/ EXPOSE 8000 

我build立这个django-app

泊坞窗,compose.yml

 django: container_name: django image: django-app:latest ports: - "8000:8000" volumes: - ./config/startup.sh:/startup.sh - ./app:/code command: /bin/sh /startup.sh 

startup.sh

 #!/bin/sh cd /code django-admin.py startproject djagento echo "Creating Project djagento" cd djagento python manage.py runserver 

我使用的是Ubuntu 14.04 LTS作为我的主机系统

docker exec -it django bash $curl 127.0.0.1:8000是成功的。

我得到我的容器与docker inspect django的IP

  "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2" 

但是,当试图curl 172.17.0.1:8000curl 172.17.0.2:8000或curl127.0.0.1:8000我不能得到任何东西,但连接重置

编辑

 docker ps baada462ae72 django-app:latest "/bin/sh /startup.sh" 6 seconds ago Up 5 seconds 0.0.0.0:8005->8000/tcp django 

*在另一个端口,相同的结果*

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a9d99ee563e5 django-app:latest "/bin/sh /startup.sh" About a minute ago Up About a minute 0.0.0.0:8005->8000/tcp django 

谢谢

对于任何人都磕磕绊绊,你必须在Docker容器内的0.0.0.0:8000上运行django服务器,只需在我的startup.sh中添加python django-admin runserver 0.0.0.0:8000解决这个问题

你的机器上有没有其他的东西使用8000端口? 尝试将主机上的端口更改为8005或9005等。 一般来说,我总是讨厌使用同一个端口,因为它有时会造成混乱。

在你的dockerfile中使用

 ports: - '8005:8000' 

实例。

后:

  • 运行docker-compose up -d
  • 运行docker ps
  • 看看你是否看到PORTS下容器的0.0.0.0:8005->8000/tcp。

然后尝试在端口8005上蜷缩IP。

如果仍然无法检查您的容器上的IPTables。 你有没有把8000端口锁在本地?