方法一:
1、可以在使用localhost的地方替换host.docker.internal
对于mac和windows,可以使用host.docker.internal替换127.0.0.1,如 mongodb://host.docker.internal:27017
2、对于linux可以使用:
创建一个桥接网络
下面的localNet是网络名字,可自行修改;关于192.168.0.0这个子网,也可以自行定义.
默认按照下面的命令,执行后将可以通过192.168.0.1访问宿主机.
docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 localNet
使用192.168.0.1替换127.0.0.1,如mongodb://192.168.0.1:27017
方法二:
可以在启动docker服务的时候把宿主机的ip当作环境变量穿进去
docker run -d --name nginx --env hostip="172.17.32.60"
可以在容器里面env|grep hostip查看ip地址
在程序中可以使用代码查询这个环境变量
// cmd 可以传入 env|grep hostip
func Cmd(cmd string) []byte {
out, err := exec.Command("/bin/bash", "-c", cmd).Output()
if err != nil {
return nil
}
return out
}
拓展如何访问同一台机器上的其他docker
docker network --help
创建一个自定义的docker局域网
docker network create mynet
然后在启动容器的时候,让容器加入局域网
docker pull redis
docker pull nginx
#运行redis容器
docker run -itd --name redis --network mynet --network-alias redis -p 6379:6379 redis
#运行nginx容器
docker run -d --name nginx -p 80:80 --network mynet --network-alias nginx --privileged=true -v /home/wwwroot:/home/wwwroot -v /home/wwwlogs:/home/wwwlogs nginx
可以使用如下命令查询网络的情况
docker network inspect mynet
当然可以使用docker network connect 加入相同的网段
#加入nginx到mynet网络
[root@localhost /]# docker network connect mynet nginx
#加入redis到mynet网络
[root@localhost /]# docker network connect mynet redis
#查看mynet网络包含的容器,会发现两个容器都加入当前网络了,后面使用ping命令是能够ping通容器名称的。
[root@localhost /]# docker network inspect mynet
参考: