docker curl: (56) Recv failure: Connection reset by peer
场景:在部署Django程序时,启动方式为gunicorn mysite.wsgi
以这种方式启动后,容器内部访问正常,部署容器的虚拟机上访问正常,物理机上浏览器无法访问,
此时修改启动方式为gunicorn -b 0.0.0.0:8000 mysite.wsgi:application
修改后容器内部、虚拟机上、宿主机上都可以访问了,
推测原因:
不绑定端口的启动方式gunicorn mysite.wsgi,
这样会创建一个进程,包含了一个监听在 127.0.0.1:8000
的线程。
https://docs.djangoproject.com/zh-hans/3.1/howto/deployment/wsgi/gunicorn/
{0,0}:网络号和主机号都全部为0,表示“本网络上的本主机”,只能用作源地址。
{0,host-id}:本网络上的某台主机。只能用作源地址。
{-1,-1}:表示网络号和主机号的所有位上都是1(二进制),用于本网络上的广播,只能用作目的地址,发到该地址的数据包不能转发到源地址所在网络之外。
{net-id,-1}:直接广播到指定的网络上。只能用作目的地址。
{net-id,subnet-id,-1}:直接广播到指定网络的指定子网络上。只用作目的地址。
{net-id,-1,-1}:直接广播到指定网络的所有子网络上。只能用作目的地址。
{127,}:即网络号为127的任意ip地址。都是内部主机回环地址(loopback),永远都不能出现在主机外部的网络中。
外部主机是无法访问127的服务的,所以改绑定到0.0.0.0就行了,
诸业皆是自作自受,休咎祸福,尽从心生。