864
docker如何访问宿主机的localhost
乐果 发表于 2022 年 12 月 12 日 标签:Docker
方法一
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
乐果 发表于 2022 年 12 月 12 日 标签:Docker