Docker container 连接本地host服务的解决方案 - All About Free

通常在使用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的域哟

Free /
Published under (CC) BY-NC-SA in categories technology