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

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

我正在尝试在 dockerized 环境中设置 pythons 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

我建造这个是为了django-app

docker-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

启动文件

#!/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是成功的。

我正在获取我的容器的 IPdocker inspect django

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

但是当尝试curl 172.17.0.1:8000curl 172.17.0.2:8000或卷曲时127.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

谢谢

答案1

对于任何遇到此问题的人,您必须在 docker 容器内的 0.0.0.0:8000 上运行 django 服务器,只需添加python django-admin runserver 0.0.0.0:8000我的 startup.sh 即可解决这个问题

答案2

您的机器上还有其他东西使用端口 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 锁定为仅限本地?

相关内容