user case:一个app container向一个oracle container跨主机传输数据。

思路一:将oracle对外暴露端口,将hostA的IP添加入app上/ect/hosts上。这种方法配置起来自由,但每次运行容器且host环境变化,都会带来严重的维护成本,甚至有时未必有权限修改hosts文件。

思路二:ambassador的agent。

1.首先在主机上拉取ambassador。

2.在host A上先启动oralce,后ambassador。

docker run -d --name oracle oracle:latest

docker run -d --link oracle:oracle -p 1521:1521 --name ambassador ambassador:latest

3.在host B上先启动ambassador,后app。

docker run -d --name ambassador-oracle --expose 1521 -e ORACLE_PORT_1521_TCP=tcp://<<hostA IP>>:1521 ambassador

这段是将host B的1521对host A的1521进行端口映射,实际执行

socat TCP4-LISTEN:1521,fork,reuseaddr TCP4:<hostA IP>:1521

 

docker run --link ambassador-oracle:oracle --name bw ubuntu:14.04

这时app中etc/hosts会出现,10.1.0.3  oracle

这个方法让对host的端口进行桥接,但新增容器后需要重启ambassador。