在容器中访问宿主机服务

开地开发时运行环境使用docker构建,代码运行在docker容器中,数据库MySQL运行在宿主机上,宿主机为MacOS。

如何在容器中连接宿主机上的数据库?

方法一:网上说在宿主机上执行ifconfig,查看docker0这个网卡的IP,在容器里的项目配置中把连接地址改为这个IP就可以连接宿主机。亲测,在Mac上无效。

方法二:docker 容器网络默认使用 bridge 桥接模式,正常情况下,容器会使用 daemon.json 中定义的虚拟网桥来与宿主机进行通讯。docker for mac 的容器里可以通过 docker.for.mac.host.internal 域名直接访问宿主机服务。这个方法对我是有效的。

如果宿主机局域网IP与docker IP冲突,则需要修改dokcer的IP网段.

  1. 如果是 Docker for mac,打开 Preferences -> Daemon -> Advanced ,修改(或增加)配置 {"bip" : "172.16.10.1/24"} ,从而避免网段冲突的问题;

  2. Linux 版本的 docker 配置

https://blog.51cto.com/wsxxsl/2060761

第一步 删除原有配置

  sudo service docker stop
sudo ip link set dev docker0 down
sudo brctl delbr docker0
sudo iptables -t nat -F POSTROUTING

第二步 创建新的网桥

  sudo brctl addbr docker0
sudo ip addr add 172.17.10.1/24 dev docker0
sudo ip link set dev docker0 up

第三步 配置Docker的文件

注意: 这里是 增加下面的配置

  vi /etc/docker/daemon.json
[root@bogon ~]# cat /etc/docker/daemon.json  ##追加的即可
{"registry-mirrors": ["http://224ac393.m.daocloud.io"],
    "bip": "172.17.10.1/24"
}
[root@bogon ~]# systemctl  restart  docker