Docker容器与宿主机相互访问更方便的方法
近期公司在给客户安装部署项目时,由于客户电脑处于无任何网络下,因此需要宿主机与容器之间可以互相访问;但是,由于容器的特性,localhost和127.0.0.1在容器中都是指向容器内,而不是宿主机,因此需要调整。
通过我大量搜索和实践,发现网上教的什么自定义网络和修改容器启动指定net网络都不太好用,最后通过实践发现了更方便的方法。
这里用win10测试,家庭版、专业版都适用(Linux本身有网卡,可不使用docker的虚拟网卡,不过使用docker的虚拟网卡ip也是好使的)。
首先启动你的docker,然后Win + R ,输入cmd回车,在命令行输入ipconfig,查看ip

从图中可看见,192.168.99.1就是docker的虚拟网卡ip,使用Docker desktop启动的docker就是如图的适配器名称,使用Docker toolbox部署的docker,网卡适配器名称是VirtualBox。
接着使用ping命令来ping这个docker虚拟网卡地址
ping 192.168.99.1
访问成功效果:

接着,进入docker容器内ping这个网卡ip地址
#进入容器 docker exec -it <容器ID> /bin/bash #ping网卡ip地址 ping 192.168.99.1 #若未安装ping命令,使用以下命令进行下载 apt-get update apt-get install -y inetutils-ping 或 apt-get install iputils-ping
ping成功效果:

由此可发现,宿主机与容器都可以ping通192.168.99.1这个ip地址,那么我们就可以使用这个ip地址来进行宿主机和容器直接的访问啦。
作者踩的坑:我自己在度娘里遨游的时候,找到了两种方法,一个是建立一个容器网络network,将容器放入这个容器网络中,这种方式只能实现容器与容器直接的快速交互, 若用docker虚拟网卡ip其实也可以互相访问,没必要建立容器网络。
二是将容器暴露在宿主机上,创建容器时增加--net=host,但是这种启动方式存在缺陷,就是端口不能进行映射了,即-p 8080:80 这个命令不能使用了,这样很容易端口冲突,导致容器无法访问;若进行生产环境部署时,十分不建议使用,当端口冲突时,十分不易察觉。
总结
您可能感兴趣的文章
- 12-20Kubernetes中使用临时容器进行故障排查的方法
- 12-20Nginx设置HTTPS的方法步骤
- 12-20二进制方式安装 Kubernetes1.18.3版本实现脚本
- 12-20Nginx工作模式及代理配置的使用细节
- 12-20ZooKeeper分布式协调服务设计核心概念及安装配置
- 12-20Kubernetes部署可视化地图的十个步骤
- 12-20关于docker清理Overlay2占用磁盘空间的问题(亲测有效)
- 12-20Docker compose配置文件写法及命令使用示例
- 12-20openwrt安装docker并启动的操作方法
- 12-20云原生Kubernetes初始化容器Init使用教程


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07新版Eclipse集成Tomcat时找不到server选项的解决方法
- 12-06IIS7 应用程序池自动回收关闭的解决方案
- 12-05Windows Server 2019安装VMware
- 12-05Windows服务器默认IE浏览器无法下载文件的解决方法
- 12-05Docker安装Jenkins全过程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法





