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。