通常在使用docker container连接数据库服务的时候, 如果数据库服务跑在独立的docker container中, 则可以很方便的使用docker links来支持服务相互访问.
但是如果某些服务并没有在container中执行, 则docker就显得不那么方便了, 比如我们需要通过container连接host上运行的MySQL数据库, 最容易想出来的解决方式是在代码中写死host对外的ip地址, 但是这需要将指定的端口暴露在外网.
显然, 这种办法很不科学, 也很合docker的路子, 所以我们可以通过维护container的host文件来做到.
获取host ip
如果是Linux主机, 我们可以通过
ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print $2 }'
来获取当前主机的局域网ip, 这个ip地址是可以从container中直接访问的
如果是mac用户, 使用boot2docker, 则默认ip是192.168.59.3
, 不需要特别获取
增加新的host列到host文件中
通过docker run
指令的--add-host
参数, 我们可以在启动container的时候方便的新增host内容, 为了方便使用, 先把之前的获取ip的命令alias
一下
alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print \$2 }'"
然后再执行docker run
命令
docker run --add-host=hostip:$(hostip) -it debian
这样, 我们就可以直接在container内通过hostip
来访问本地host了
其他要注意的
如果访问mysql等服务, 可能需要修改user的域哟