一般每个容器,都会映射一个端口到宿主机中,方便在宿主机上访问,例如ngnix,mysql,redis等等。
但是我们有一种常见的场景,就是a容器,需要通过宿主机的端口映射,调用b容器的服务,这里如果在a容器内部配置localhost/127.0.0.1/0.0.0.0:port都是不会起作用的,因为容器和容器之间的ip是隔离的,无法互相通过本地端口访问。
一个办法就是在docker run中把宿主机的端口映射到容器中,但是这样最痛苦的地方就是,每当我在容器中想多添加一个服务,那就得重新run。
个人认为更好的办法,是获取宿主机的ip, 然后在容器内部配置宿主机的ip, 就可以访问到b容器的服务。参考这里(其实在docker run中指定环境变量的办法也不错,不过在docker公服下载的时候,往往都是直接拷贝现成run命令)得到方法:
/sbin/ip route|awk ‘/default/ { print $3 }’
得到的宿主机ip, 加上对应的端口,就可以访问其他容器的服务了