从docker容器到主机的Curl请求超时

从docker容器到主机的Curl请求超时,curl,nginx,docker,docker-networking,Curl,Nginx,Docker,Docker Networking,我遇到了一个与docker的问题,我相信这是由于我对docker网络的了解存在差距 我有一个运行nginx和php的docker映像。必要的端口已暴露。下面是我用来运行映像的一个简化命令 docker run——命名php应用程序-p 80:80 php应用程序 问题在于,对于安装设置,php应用程序会使用主机公共IP自行卷曲 例如,, curlhttp://105.15.25.120/phpsetup.php?setup 当curl超时时,从容器内部似乎无法访问此IP curl -vvv 10

我遇到了一个与docker的问题,我相信这是由于我对docker网络的了解存在差距

我有一个运行nginx和php的docker映像。必要的端口已暴露。下面是我用来运行映像的一个简化命令

docker run——命名php应用程序-p 80:80 php应用程序

问题在于,对于安装设置,php应用程序会使用主机公共IP自行卷曲

例如,,
curlhttp://105.15.25.120/phpsetup.php?setup

当curl超时时,从容器内部似乎无法访问此IP

curl -vvv 105.15.25.120
About to connect() to 105.15.25.120 port 80 (#0)
Trying 105.15.25.120...
Connection timed out
Failed connect to 105.15.25.120:80; Connection timed out
Closing connection 0
curl: (7) Failed connect to 105.15.25.120:80; Connection timed out
我可以从容器内部成功地卷曲到其他IP,而不是主机的

从主机使用curl可以很好地工作,并且不会导致任何奇怪的行为

为了简单和测试,我复制了官方nginx图像的行为,以帮助得出结论,这不是我自己图像的问题

docker run——命名一些nginx-v/some/content:/usr/share/nginx/html:ro-p80:80


根据我的研究,这似乎是一个路由问题?不确定

容器不应卷曲主机。它应该卷曲自己,因为它承载着您希望卷曲的内容


curlhttp://127.0.0.1/phpsetup.php?setup

容器不应卷曲主机。它应该卷曲自己,因为它承载着您希望卷曲的内容


curlhttp://127.0.0.1/phpsetup.php?setup

您的主机可能有防火墙规则,禁止从Docker容器内部进行连接。请特别查看
过滤器
表的
输入
链中的规则。您如何从容器内部知道主机的IP地址?启动容器时是否将其提供给容器?是的,通过一个ENV变量,您的主机可能具有防火墙规则,禁止从Docker容器内部进行连接。请特别查看
过滤器
表的
输入
链中的规则。您如何从容器内部知道主机的IP地址?您在启动容器时是否将其提供给容器?是的,通过ENV variable感谢您的回复。请问这是设计的吗?这是最佳实践。容器不应该关心主机或主机中/上/的任何内容,而应该运行自包含的。例外情况是,
docker run
命令向容器提供的内容(数据卷、环境变量和其他位)是否仍有方法允许将curl发送到主机IP?我知道这不是很好,但它涵盖了php应用程序中的边缘情况。感谢您的回复。请问这是设计的吗?这是最佳实践。容器不应该关心主机或主机中/上/的任何内容,而应该运行自包含的。例外情况是,
docker run
命令向容器提供的内容(数据卷、环境变量和其他位)是否仍有方法允许将curl发送到主机IP?我知道这不是很好,但它涵盖了php应用程序中的边缘情况。