似乎将服务公开给其他Docker容器的首选方法是容器链接,它设置了一些环境变量,然后您必须在应用程序代码中使用它们来查找主机名和端口号:
psql -h $PG_PORT_5432_TCP_ADDR -p $PG_PORT_5432_TCP_PORT
有没有理由不通过端口转发以对应用程序透明的方式完成?因此,就像我可以在标准端口80上的容器内运行我的Web服务器并让Docker弄清楚要使用的实际端口一样,我可以这样做
psql -h 0.0.0.0 # no -p necessary, we use the default port
当我启动docker时,将设置端口转发,就像使用服务器端口一样。
答案 0 :(得分:2)
这是可能的!它实际上是由CoreOS团队提出的;您可以在以下博客文章中阅读更多内容:
http://coreos.com/blog/Jumpers-and-the-software-defined-localhost/
Docker很快就会允许启动一个容器来共享另一个容器的网络命名空间;它将有助于这些场景(在短期内,它将允许你很容易地做你的建议)。
答案 1 :(得分:0)
Project Atomic也遵循这种方法:
http://www.projectatomic.io/docs/inter-container-networking/
Geard使用iptables使容器能够相互连接。网络命名空间允许将iptables规则添加到容器的网络命名空间。基本思想是使远程端点看起来好像它们是容器的本地端点。例如,可以使数据库容器看起来在应用程序容器内本地运行。