docker 如何访问宿主机的localhost

方法一:

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

参考:

docker network详解、教程_wangyue23com的博客-CSDN博客_docker network

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值