赞
踩
方法一:
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
参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。