Docker curl:(7)无法连接到本地主机端口80:连接被拒绝
我从本地主机执行
$ curl localhost
or
$ curl http://www.xxcms.com
and response its ok.
我从容器名称" php"执行:
curl localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
curl www.xxcms.com
curl: (7) Failed to connect to www.xxcms.com port 80: Connection refused
从Docker容器故障连接时,如果在Docker容器外部连接则可以,这是什么问题?
原因
localhost(即127.0.0.1)始终表示与命令当前正在运行的主机相同。因此,在您的主机上,它将调用您的主机,但是在容器中运行时,它将调用您的容器。
我将假定您有一个将www.xxcms.com域指向localhost的DNS解析器。 nginx容器将主机的端口80转发给它,因此就好像它在主机上运行一样。因此,当您从主机调用它时,它会成功,因为调用转到了主机的端口80。
但是,当您在php容器内调用它时,它不是在调用主机,而是在php容器的端口80上调用,并且您的php容器内没有运行的网络服务器。如果您在nginx容器中进行了此调用,则它将起作用。
您应该问自己,为什么您的php容器需要调用您的nginx容器,这对我来说听起来很奇怪,因为通常nginx只会将"工作"转发给php。例如,您能否只创建一个您想要的PHP脚本并直接调用它?
如果确实需要调用nginx,请记住,来自同一docker-compose.yml文件的容器可以按名称相互调用,因此您可以仅使用nignx作为主机名。
解决方案
在php容器中,没有虚拟主机。 如果我在Docker容器php中添加php /etc/hosts 172.17.0.3(docker nginx的IP,查找命令docker inspect nginx | grep “IPAddress”),其工作原理…………
172.17.0.3 www.xxcms.com
版权归原作者 xyza小太阳 所有, 如有侵权,请联系我们删除。