如何解决使用Docker在本地运行Django / Gunicorn应用失败,并显示ERR_CONNECTION_REFUSED
此处显示的我的Dockerfile可以部署到Google App Engine flex,并且可以正常运行。
.first()
我还可以通过进入虚拟环境来本地运行应用程序:
FROM gcr.io/google-appengine/python
RUN apt-get update && apt-get install -y \
binutils \
gdal-bin \
python-gdal
RUN virtualenv /env -p python3.6
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt
RUN mkdir -p -m775 uploads
ADD . /app
CMD exec gunicorn -b :$PORT mysite.wsgi
这使我可以在http:// localhost:8000 /的浏览器中查看它,还可以在本地访问API。
但是,我的问题是当我使用docker在本地运行应用程序时。当我转到http://0.0.0.0:8000/时,总是会收到“ ERR_CONNECTION_REFUSED”错误。
我尝试了以下各种迭代:
python manage.py runserver
和
docker run --entrypoint=/bin/bash django -c "python manage.py
runserver 0.0.0.0:8000"
和
docker run --entrypoint=/bin/bash django -c "p["gunicorn","--bind",":8000","--workers","3","mysite.wsgi:application"]
我尝试将Docker文件cmd(并重建映像)更改为:
docker run --detach -p 8080:8000 --name django django
和
CMD ["python","manage.py","runserver","0.0.0.0","8000"]
但是请继续收到相同的“ ERR_CONNECTION_REFUSED”错误
我遍历了所有可以找到的与SO相关的问题,并尝试了建议的内容,包括这个Docker - Can't access Django server
我正在运行ubuntu 18.04。这是我的Docker版本:
ENTRYPOINT [ "python","manage.py" ]
#CMD [ "runserver","127.0.0.1:8000" ]
CMD [ "runserver","0.0.0.0:8000" ]
非常感谢您提供的任何帮助。
解决方法
我误解了docker如何通过两种方式工作。
首先,我反转了docker run命令的-p参数上的端口。
Django会监听8080,因此run命令应该是docker run --detach -p 8000:8080 --name django django
而不是-p 8080:8000
。我的第二个错误是我以为我需要侦听0.0.0.0:8000的容器端口,但是-p将容器的8080端口绑定到TCP端口8000,所以我需要侦听localhost:8000。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。