634

docker如何访问宿主机的localhost

乐果   发表于   2022 年 12 月 12 日 标签:docker

方法一

1、可以在使用 localhost 的地方替换 host.docker.internal

对于 macwindows,可以使用 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

0

文章评论