我真的不明白这里发生了什么。我只是想使用主机的公共ip,在发布的端口上,从一个停靠容器内部执行一个http请求,然后通过主机执行另一个码头容器请求。
这是我的装置。我有我的开发机器。我有一台有两个集装箱的码头主机。CONT_A在端口3000上监听和发布web服务。
DEV-MACHINE
HOST (Public IP = 111.222.333.444)
CONT_A (Publish 3000)
CONT_B

在我的开发机器上(一台完全不同的机器)
我可以卷曲而不出任何问题
curl http://111.222.333.444:3000 --> OK当我SSH进入主机时
我可以卷曲而不出任何问题
curl http://111.222.333.444:3000 --> OK当我在CONT_B中执行时
不可能只是暂停。平很好不过..。
docker exec -it CONT_B bash
$ curl http://111.222.333.444:3000 --> TIMEOUT
$ ping 111.222.333.444 --> OK为什么?
Ubuntu 16.04,Docker 1.12.3 (默认网络设置)
发布于 2017-09-19 15:05:35
我也遇到了类似的问题,我在一个容器中有一个nginx服务器(让我们称之为web),它有几个服务器块,而cron安装在另一个容器中(让我们称之为cron)。我用的是码头写作。我想不时地使用curl从cron到web,在其中一个应用程序上执行一些php脚本。它应如下:
curl http://app1.example.com/some_maintance.php但过了一段时间我总是找不到主人。
第一个解决方案是更新cron容器中的/etc/host,并添加:
1.2.3.4 app1.example.com其中1.2.3.4是ip for web容器,它起了作用--但这是一次黑客攻击--据我所知,也不鼓励这种手动更新。您应该在docker组合中使用extra_hosts,它需要显式的ip地址而不是容器的名称来指定IP地址。
我尝试使用自定义网络解决方案,正如我所看到的,这是正确的解决方法,但我在这里从未成功。如果我学会了如何做到这一点,我保证更新这个答案。
最后,我使用curl功能来指定服务器的IP地址,并在单独的参数中将域名作为报头传递:
curl -H'Host: app1.example.com' web/some_maintance.php不太漂亮,但很有用。
(这里的web是我的nginx容器的名称)
https://stackoverflow.com/questions/41171115
复制相似问题