docker 访问宿主机网络

使用宿主机IP

在安装Docker的时候,会在宿主机安装一个虚拟网关docker0,我们可以使用宿主机在docker0上的IP地址来代替localhost

首先,使用如下命令查询宿主机IP地址:

ifconfig

可以发现宿主机的IP是172.17.0.1,那么将proxy_pass http://localhost:1234改为proxy_pass http://172.17.0.1:1234就可以解决502 Bad Gateway错误。

但是,不同系统下宿主机的IP是不同的,例如Linux下一般是172.17.0.1, macOS下一般是192.168.65.1,并且这个IP还可以更改。所以使用IP配置nginx.conf,不能跨环境通用。

使用host网络

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

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

在docker中使用--network host来为容器配置host网络:

docker run -d --name nginx --network host nginx

上面的命令中,没有必要像前面一样使用-p 80:80 -p 443:443来映射端口,是因为本身与宿主机共用了网络,容器中暴露端口等同于宿主机暴露端口。

使用host网络不需要修改nginx.conf,仍然可以使用localhost,因而通用性比上一种方法好。但是,由于host网络没有bridge网络的隔离性好,使用host网络安全性不如bridge高。

总结

本文提出了使用宿主机IP和使用host网络两种方法,来实现从容器中访问宿主机的网络。两种方法各有优劣,使用宿主机IP隔离性更好,但通用性不好;使用host网络,通用性好,但带来了暴露宿主网络的风险

原文地址:https://www.cnblogs.com/mafeng/p/11781003.html

时间: 2024-08-30 03:00:51

docker 访问宿主机网络的相关文章

Docker 与 宿主机之间的文件cp

Docker 与 宿主机之间的文件cp 第一种方法是官方比较推荐的,其实和第二种方法实现是一样的. 第一种方法例: 将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下. docker cp /www/runoob 96f7f14e99ab:/www/ 将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www. docker cp /www/runoob 96f7f14e99ab:/www 将容器96f7f14e99ab的/www目录

如何在docker和宿主机之间复制文件

如何在docker和宿主机之间复制文件 最近在用Docker布署hadoop,要将文件上传到HDFS首先文件得在Docker容器中吧,网上提供的方法差不多有三种 1.用-v挂载主机数据卷到容器内 2.直接在主机上拷贝到容器物理存储系统 3.用输入输出符 具体方法这篇文章写的很详细:http://blog.csdn.net/yangzhenping/article/details/43667785 但是对这三种方法我都不太喜欢,无意间看到另位一种方法供大家参考: 从主机复制到容器sudo dock

docker同宿主机容器和不同宿主机容器之间怎么通信?

第一部分 docker有四种网络模式第一种:bridge 模式当docker进程启动时,主机上会创建一个名为docker0的虚拟网桥,容器内部会创建一个只能容器内部看到的接口eth0,eth0 和docker0工作方式就像物理二层交换机一样,可以互相通信. 命令执行过程:#docker run -tid --net=bridge --name docker_bri1 ubuntu-base:v3#docker run -tid --net=bridge --name docker_bri2 ub

docker挂载宿主机文件夹到容器里面

docker run -d -p 8090:8080 -v /[宿主机文件绝对路径]:/[容器路径] --name [新名字] [容器名字] 例子 docker run -d -p 8090:8080 -v /usr/webapps/app1:/usr/local/tomcat/webapps --name tomcat1 docker.io/tomcat 进入容器指令 docker exec -it [容器名字] /bin/basha 注意:项目部署在tomcat下 记得放在ROOT文件夹下面

Docker拷贝宿主机与容器中的文件

如果我们需要将宿主机文件拷贝到容器内可以使用 docker cp 命令,也可以将文件从容器内拷贝到宿主机 将宿主机文件拷贝到容器内 docker cp 要拷贝的宿主机文件或目录 容器名称:容器文件或目录 1. 在宿主机上创建一个mengxuegu文件并写入内容 2. 将mengxuegu文件拷贝进 mycentos2 容器中的 /opt 目录下(mycentos2要是UP启动状态) 3. 登录 mycentos2 容器,查看/opt目录下是否有 mengxuegu 文件 从容器内文件拷贝到宿主机

Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案

docker 容器网络默认使用 bridge 桥接模式,正常情况下,容器会使用 daemon.json 中定义的虚拟网桥来与宿主机进行通讯. 最近更新 Docker for mac 之后,发现以前容器中可以访问的局域网内服务(使用宿主机所在的局域网 IP 访问),变得不可访问了.一开始以为是新版本改了默认网络配置,查了半天 release log 并没有找到相关条目. 后来在同事的帮助下发现问题所在: 由于换了新的工位,宿主机的局域网 IP 网段由 172.16.*.* 切换到了 172.17.

VirtualBox 设置静态ip,实现虚拟机和宿主机互相访问,并能访问网络

虚拟机支持3种常用网络模式: NAT模式,虚拟机可以访问宿主机和网络,宿主机不能访问虚拟机. Host-Only模式,虚拟机和宿主机可以互相访问,但是虚拟机不能访问网络. Bridge模式:虚拟机作为独立的计算,和宿主机同样连接到外部网络.如果局域网中是DHCP,将虚拟机设置为静态ip,存在ip冲突的风险. 为将VirtualBox 设置为静态ip,实现虚拟机和宿主机互相访问,并能访问网络,我们可以将NAT和Host-Olny 模式混合使用,步骤如下: 1.配置2块网卡:一个选择[网络地址转换(

如何安装虚拟机并实现宿主机和客户机之间匿名共享访问

本次教程笔者要完成宿主机通过匿名访问方式访问虚拟机内部文件.在此之前首先需要安装虚拟机VMware软件. 下面以虚拟机VMware12安装为例,双击虚拟机安装程序如图: 点击下一步,如下图: 建议点击更改安装路径,将虚拟机安装在非系统盘,路径更改完毕,下方复选框默认不勾选,然后点击下一步: 取消勾选复选框再点击下一步: 勾选创建快捷方式,点击下一步: 点击安装,进行安装读条: 等待几分钟出现安装完成提示,点按许可证按钮: 出现输入注册码的提示页: 在里面输入你所购买的软件序列号,输入完毕即完成虚

微服务Docker化注册中心网络处理

微服务Docker化 docker网络有三种模式,可以在启动时通过--net=来指定 --net=bridge 默认选项,用网桥的方式来连接docker容器. --net=host docker跳过配置容器的独立网络栈.本质上来说,这个参数告诉docker不去打包容器的网络层.当然,docker 容器的进程仍然被限制在它自己独有的文件系统.进程列表以及其他资源中.一个快速命令 ip addr 将像你展示docker的网络,它是建立在docker 宿主主机上的,有完整的权限去访问宿主主机的网络接口