首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能通过主机从另一个码头集装箱卷起

为什么我不能通过主机从另一个码头集装箱卷起
EN

Stack Overflow用户
提问于 2016-12-15 18:37:45
回答 4查看 18.5K关注 0票数 31

我真的不明白这里发生了什么。我只是想使用主机的公共ip,在发布的端口上,从一个停靠容器内部执行一个http请求,然后通过主机执行另一个码头容器请求。

这是我的装置。我有我的开发机器。我有一台有两个集装箱的码头主机。CONT_A在端口3000上监听和发布web服务。

代码语言:javascript
运行
复制
DEV-MACHINE

HOST (Public IP = 111.222.333.444)
  CONT_A (Publish 3000)
  CONT_B

在我的开发机器上(一台完全不同的机器)

我可以卷曲而不出任何问题

代码语言:javascript
运行
复制
curl http://111.222.333.444:3000 --> OK

当我SSH进入主机时

我可以卷曲而不出任何问题

代码语言:javascript
运行
复制
curl http://111.222.333.444:3000 --> OK

当我在CONT_B中执行时

不可能只是暂停。平很好不过..。

代码语言:javascript
运行
复制
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 (默认网络设置)

EN

Stack Overflow用户

发布于 2017-09-19 15:05:35

我也遇到了类似的问题,我在一个容器中有一个nginx服务器(让我们称之为web),它有几个服务器块,而cron安装在另一个容器中(让我们称之为cron)。我用的是码头写作。我想不时地使用curl从cron到web,在其中一个应用程序上执行一些php脚本。它应如下:

代码语言:javascript
运行
复制
curl http://app1.example.com/some_maintance.php

但过了一段时间我总是找不到主人。

第一个解决方案是更新cron容器中的/etc/host,并添加:

代码语言:javascript
运行
复制
1.2.3.4 app1.example.com

其中1.2.3.4是ip for web容器,它起了作用--但这是一次黑客攻击--据我所知,也不鼓励这种手动更新。您应该在docker组合中使用extra_hosts,它需要显式的ip地址而不是容器的名称来指定IP地址。

我尝试使用自定义网络解决方案,正如我所看到的,这是正确的解决方法,但我在这里从未成功。如果我学会了如何做到这一点,我保证更新这个答案。

最后,我使用curl功能来指定服务器的IP地址,并在单独的参数中将域名作为报头传递:

代码语言:javascript
运行
复制
curl -H'Host: app1.example.com' web/some_maintance.php

不太漂亮,但很有用。

(这里的web是我的nginx容器的名称)

票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41171115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档