在docker中不能访问Django项目的8000端口

我试图把我的Django项目放入一个docker镜像。

这是我的Dockerfile

 FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt -i https://pypi.douban.com/simple ADD . /code/ EXPOSE 8000 

然后,我建立并运行这个码头容器:

 docker run -i -t -p 8000:8000 e2 python3 manage.py runserver 8000 Performing system checks... System check identified no issues (0 silenced). July 25, 2017 - 16:28:00 Django version 1.11.3, using settings 'chaoYuBackend.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. 

但是当我在Chrome中访问localhost:8000127.0.0.1:8000时,我得到了ERR_CONNECTION_REFUSED

这是执行docker ps得到的,似乎8000端口已经被暴露:

 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71c0502de704 e2 "python3 manage.py..." 54 seconds ago Up 52 seconds 0.0.0.0:8000->8000/tcp gallant_boyd 

当我运行lsof -i :8000 ,出现错误:

结果

我的码头版本是17.06.0-ce, build 02c1d87 ,我使用MacOS 10.12.6。

在我的Dockerfile有什么不对吗? 我怎样才能浏览我的Django网站?

提前致谢!

我终于解决了这个问题!

我想这是由自制docker包引起的。

通过官方dmg重新安装docker之后,一切都可以。 😷

Docker公开随机本地端口上的容器端口。 看看docker ps

 PORTS 0.0.0.0:32769->8000/tcp 

Docker在本地机器上公开端口32769 。 你可以通过localhost:32769访问localhost:32769

-P选项将所有端口发布到主机接口。 Docker将每个暴露的端口绑定到主机上的随机端口。 …

用'-p 8000:8000'替换'-P',然后重试。