![Docker无法访问主机上的Web服务器](https://linux22.com/image/677082/Docker%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E4%B8%BB%E6%9C%BA%E4%B8%8A%E7%9A%84Web%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我正在尝试在 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:8000
或curl 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 锁定为仅限本地?