很简单:
至以下路径C:\Windows\System32\drivers\etc下找到HOSTS文件,右键选择打开方式,选择记事本打开。直接编辑。
在最下方的空白处新起一行
前面是IP地址,后面是网址,IP地址和网址中间使用一个空格。
如:“542393169 awsamazoncom”
如有多行直接在下面再添加一行就行。
最后保存即可,如果无法直接保存,可以先保存为TXT文件,再删除后辍名即可。
本文用到的环境如下:
host: centos7
docker: 通过 yum install -y docker 安装,版本号为1103
docker镜像:
# Version: 001 FROM ubuntu:latest MAINTAINER paul liu "polluxliu@msncom" RUN apt-get update RUN apt-get install -y net-tools RUN apt-get install -y iputils-ping CMD /bin/bash
场景图:
我的host主机接有无线路由器,通过ADSL拨号上网,网卡eth0固定IP为1921680200,网关为路由器的IP 19216801。
在host上安装docker,并运行容器。
通过以下命令安装docker,
yum install -y docker
启用docker,
systemctl start docker
然后在host主机运行 ifconfig 或 ip a 命令,可以看到除去host原有的网卡eth0和回环lo外,多了个docker0。
docker0 IP为1721701,所在的网段默认为B类私网地址1721700/16。可以将docker0看做是host主机的一块虚拟网卡。这样host主机就等同于配置了双网卡,两块网卡之间可以通信,但前提是启用ip_forward。
这是docker0的第一个身份。
运行两个容器docker1,docker2,然后在host主机上运行 brctl show 查看,
这里可以看出docker0的第二个身份,一个虚拟交换机。每运行一个容器,就会产生一对veth,其中一端连接到docker0上,另一端连接到容器的eth0上。这样,所有连接到docker0的容器组成了一个局域网。如下图:
在host主机上运行 ifconfig ,也会发现多了两个veth这样的网络接口。
在host主机上运行 ip addr show veth6d9a691 ,可以查看到该veth具有mac地址,这也正说明了docker0的虚拟交换机的身份,交换机是通过mac地址通信的,连接到交换机的设备必须具有mac地址。
由于docker0自身也具有mac地址,这个与纯二层交换机是不同的,并且绑定了IP 1721701,容器默认把docker0作为了网关。也就是docker0还兼具路由的功能,因此可以把docker0看做是一个三层交换机,可以做二层数据包转发,也可以做三层路由转发。
在容器中运行 route -n 查看路由如下:
在host主机上运行 route -n 查看路由如下:
在host中,访问本网段19216800是通过eth0转发数据包的,访问1721700网段是通过docker0转发数据包的,而对于其他如公网是通过eth0将数据包转发给网关19216801,再由该网关进行数据包转发的,比如上网。
在容器中运行 ping sohucom 或 ping 1921680200 都可以ping通。
默认情况下,不需要再额外做任何配置,在一台host主机上,通过docker0,各容器之间可以互通,并且可以通过host的eth0连接外网。
通俗的讲,通过docker0组成了一个网段为1721700/16的以太网,docker容器发起请求时,如果是相同网段则经由docker0转发到目标机器,如果是不同网段,则经由docker0,转发到host的另一块网卡eth0上,由eth0负责下一步的数据包转发,比如公网地址。
下面进一步分析一下报文是怎么发送到外面的。
容器内部发送一条公网请求报文,通过eth0,在veth被接收。此时报文已经来到了主机上,通过查询主机的路由表( route -n ),如果发现报文应该通过主机的eth0,从默认网关发送出去,那么报文就被从docker0转发给主机的eth0,但前提是首先启用ip_forward功能,才能在host主机的docker0和eth0两个网卡间传递数据包。
由于目标地址并不属于host主机所在网段,那么会匹配机器上的 iptables中的nat表POSTROUTING链中的规则。
在host主机运行命令 iptables -L -n -t nat --line-numbers ,查看nat表,这里只看POSTROUTING链:
第一行中说明,对于源地址为1721700/16网段的数据包,发出去之前通过MQSQUERADE伪装。linux内核会修改数据包源地址为host主机eth0的地址(也就是1921680200),然后把报文转发出去。对于外部来说,报文是从主机eth0发送出去的。
局域网内的机器由于都是私有IP,是无法直接访问互联网的(数据包可以发出去,但回不来。)如果要上网,除了可以通过硬件路由器,也可以通过软件路由,在iptables的nat表中的POSTROUTING链中添加SNAT规则。
测试一下,在host主机运行命令 iptables -t nat -D POSTROUTING 1 将第一条规则删掉,那么在容器中就运行命令 ping sohucom 就ping不通了。但仍然可以ping通host主机。
在host主机运行命令以下命令恢复:
iptables -t nat -I POSTROUTING -s 1721700/16 -o eth0 -j SNAT --to-source 1921680200
或者
iptables -t nat -I POSTROUTING -s 1721700/16 -j MASQUERADE
关于SNAT和MASQUERADE,这篇文章已经有过描述,可以参考: Docker前传之linux iptables
新建一Dockerfile,用以运行nginx容器:
# Version: 001 FROM paulliu/ubuntu_ip RUN apt-get install -y nginx EXPOSE 80
在host主机运行构建命令构建镜像 docker build -t paulliu/nginx
在host主机运行容器启动命令 docker run -d -p 80 --name nginx1 paulliu/nginx nginx -g "daemon off;"
在host主机查看容器的端口映射 docker port nginx1 80
在host主机运行命令 iptables -nat -L -n 可以看到在PREROUTING链中多了以下DNAT规则:
也就是在容器启动时通过 -p 80 将host主机1921680200:32773映射为容器1721704:80。
注意:docker容器每次启动时获取的IP地址未必是一样的,而且 -p 80 是在host主机上随机选择一个端口号进行映射,每次启动的端口号也未必是一样的。但iptables中相关的规则是自动变更的。
在host主机运行 curl localhost:32773 或者在其他主机运行 curl 1921680200:32773 结果如下:
hosts就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,打开网站时电脑首先读取hosts文件,查看文件中是否有网址的IP,如果有就通过IP找到网站,没有的话就到DNS服务器中进行解析IP。
修改hosts文件
1、在计算机地址栏输入C:\Windows\System32\drivers\etc,然后enter键进入。
2、找到HOSTS文件,右击,用笔记本打开。
3、在hosts文件最下面添加你要修改的东西,格式:网址空格 网址,意思是访问后者网址会跳转到前一个网址。
4、保存。
扩展资料
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址。
需要注意的是,Hosts文件配置的映射是静态的,如果网络上的计算机更改了请及时更新IP地址,否则将不能访问。
可以修复下hosts文件到正常,然后阻止软件修改此文件。
打开记事本,根据需要输入以下代码:
一、 禁止修改HOSTS文件:
attrib +r +a +s +h %windir%\system32\drivers\etc\hosts
echo y|cacls %windir%\system32\drivers\etc\hosts /g everyone:r
二、允许修改HOSTS文件:
echo y|cacls %windir%\system32\drivers\etc\hosts /g everyone:f
attrib -r -a -s -h %windir%\system32\drivers\etc\hosts
保存为BAT格式后双击运行即可,当然也可以在CMD中逐条输入。
以上就是关于如何在window配置host全部的内容,包括:如何在window配置host、单host下Docker的默认网络配置、hosts配置是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!