docker从容器中怎么访问宿主机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker从容器中怎么访问宿主机相关的知识,希望对你有一定的参考价值。

例如你的docker环境的虚拟IP是192.168.99.100,那么宿主机同样会托管一个和192.168.99.100同网段的虚拟IP,并且会是主IP:192.168.99.1,那么就简单了,在容器中访问192.168.99.1这个地址就等于访问宿主机。

注意,通过192.168.99.1访问宿主机,等于换了一个ip,如果数据库或中间件限制了本机访问或者做了ip段限制,要记得添加192.168.99.1到白名单。

Docker容器运行的时候有 host 、 bridge 、 none 三种网络可供配置。默认是 bridge ,即桥接网络,以桥接模式连接到宿主机; host 是宿主网络,即与宿主机共用网络; none 则表示无网络,容器将无法联网。

当容器使用 host 网络时,容器与宿主共用网络,这样就能在容器中访问宿主机网络,那么容器的 localhost 就是宿主机的 localhost 。

扩展资料

宿主机和容器通信原理的问题:

考虑重启速度:在实际的运维过程中,部分场景下,会出现主机卡死,或者docker进程卡死, 这时,最快恢复业务的方法是重启主机。

 容器在主机重启后,可以自动恢复,因此可以做到在1到2分钟内快速恢复业务。这一点太重要了,物理机重启由于需要做各种硬件检测,重启时间一般在5到10分钟, 虚拟机重启一般在1分钟以内 , 物理机显然无法满足需求。

重建能力很重要:

容器平台经常需要更新操作系统,或者根据需要调整主机规格。

运行一段时间后,发现内存配置偏少了, 需要添加内存。这时候申请一台新的机器加入到集群中,将旧机器下线即可。

运行多年的 ubuntu 12.04 官方已经不再维护, 需要全量替换,工作量相当大。好的方法就是使用全新的服务器替换旧服务器。

当发生故障,主机无法恢复时, 直接申请新服务器加入集群即可。

参考技术A docker搭建了lnmp环境后,如果需要访问安装在宿主机上的数据库或中间件,是不能直接使用127.0.0.1这个ip的,这个ip在容器中指向容器自己,那么应该怎么去访问宿主机呢:
例如你的docker环境的虚拟IP是192.168.99.100,那么宿主机同样会托管一个和192.168.99.100同网段的虚拟IP,并且会是主IP:192.168.99.1,那么就简单了,在容器中访问192.168.99.1这个地址就等于访问宿主机,问题解决
注意,通过192.168.99.1访问宿主机,等于换了一个ip,如果数据库或中间件限制了本机访问或者做了ip段限制,要记得添加192.168.99.1到白名单本回答被提问者采纳
参考技术B docker跟宿主机交互的是通过原生网络实现的。

当Docker进程启动之后,它会配置一个虚拟的网桥叫docker0在宿主机上。这个接口允许Docker去分配虚拟的子网给即将启动的容器们。这个网桥在容器内的网络和宿主机网络之间将作为接口的主节点。

Docker容器启动后,将创建一个新的虚拟接口并分配一个网桥子网内的IP地址。这个IP地址嵌在容器内网络中,用于提供容器网络到宿主机docker0网桥上的一个通道。Docker自动配置iptables规则来放行并配置NAT,连通宿主机上的docker0,就可以访问宿主机的mysql数据文件了。

docker容器访问宿主机IP

问题:

  一部分服务打包进docker 用docker-compose启动,但是一部分正在开发中,放在host比较方便,比如node.js这种,希望在调试已经封进docker容器的时候,能设置从容器网络访问宿主机node服务

参考https://www.jb51.net/article/149173.htm

docker 安装的时候,会在宿主机建立一块虚拟网卡docker0, 宿主机 通过这个网卡 桥接到了docker内局域网。

在docker容器内,通过宿主机在局域网内的IP地址就能访问宿主机的服务了。

查询

ip addr show docker0

技术图片

里面的 inet 172.17.0.1/16 里 只需要172.17.0.1就可以作为主机的IP地址了

 

以上是关于docker从容器中怎么访问宿主机的主要内容,如果未能解决你的问题,请参考以下文章

docker 怎么把宿主机的文件拷贝到运行的容器中

怎样将Docker容器中的文件导入到主机

从 docker 容器(linux 上的 docker)访问主机 postgresql

从 Docker 容器中访问主机上的 MySQL 数据库

docker容器访问宿主机IP

无法从 docker 容器中访问 MacOSX 主机上的端口