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

标签 curl nginx docker docker-networking

我遇到了 docker 的问题,我认为这是由于我对 docker 网络的了解存在差距。

我有一个运行 nginx 和 php 的 docker 镜像。暴露了必要的端口。这是我用来运行镜像的简化命令。
docker run --name php-app -p 80:80 php-app
问题在于,对于安装设置,php 应用程序使用主机公共(public) IP curl 到自身。

举个例子,curl http://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

我可以从容器内部成功地 curl 到其他 IP,而不是主机的。

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

为简单起见和测试,我使用官方 nginx 镜像重现了该行为,以帮助得出结论,这不是我自己的镜像的问题。
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -p 80:80
根据我的研究,这似乎是一个路由问题?没有把握。

最佳答案

容器不应 curl 主机。它应该自己 curl ,因为它托管了您希望 curl 的内容。
curl http://127.0.0.1/phpsetup.php?setup

关于从 docker 容器到主机超时的 curl 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42939208/

相关文章:

docker - 如何在 AWS ECS 中的同一任务中的容器之间进行通信?

curl - 如何从没有附加内容 URL 的下载按钮获取或 curl ?

php - curl 'malformed url'

nginx - nginx 背后的 ASP.NET 5

ruby-on-rails - 无法在 Ubuntu 上通过 Unicorn 重新启动找到 libmagickwand-dev 包

docker - 拒绝打开/etc/docker/daemon.json的Docker权限:拒绝权限

docker - 如何在 dockerfile 中的 cd 命令之后执行 .sh 文件?

javascript - 通过 Google Apps 脚本 POST 到 Todoist API 时出现 HTTP 错误 "AUTH_CSFR_ERROR"

javascript - RESTful 客户端中的 Ajax 请求

macos - nginx docker容器上的连接被拒绝