Docker 网络--容器的接口映射
container 提供一个web服务,web服务是需要外界访问的,那么接着就有一个问题,比如说我们创建一个Nginx 服务,Nginx 本身是一个非常出名的web服务。在正常情况下我们访问会看到一个欢迎的首页。
我们先创建一个Nginx 服务的container。
我们创建了一个Nginx server,这时候我们不能访问这个server。访问只能通过命令交互式访问
实际上无法访问。我们需要把Nginx暴露给外部访问,Nginx server 有自己的IP地址,默认端口是80,看下IP地址,默认是连接到bridge上的,可以查看bridge
docker network inspect bridge
看到Nginx server IP地址是172.17.0.4 ;
这时候在外部ping 是可以ping 通的,Telnet 也是可以的,没有Telnet 命令,通过命令安装: yum -y install telnet
,curl 是可以访问网站的,返回Nginx页面。
我们需要通过外部访问,并不是在这台机器中访问,这就需要通过docker 的一个技能----映射。
可以看到Nginx的80端口只绑定到了IP为172.17.0.4 网络空间中。如果能把80这个端口绑定到这台机器本地的网络空间中,那么访问这个Nginx server 就不需输入172.17.0.4 这个IP了,而只输入127.0.0.1就可以了。甚至在机器外面也可以。
添加映射
先停掉这个Nginx server ,并且删掉Nginx server。
docker stop nginx-web
docker rm nginx-web
重新创建Nginx server , docker run --name nginx-web -d -p 80:80 nginx ;-p 是port map 参数是这样的80:80,意思是将容器的80端口映射到这台机器本地80端口。
再通过docker ps 时,多了一个0.0.0.0:80->80/tcp
之前通过curl 127.0.0.1时不能访问,现在curl 127.0.0.1,若是没有安装curl 安装一下。yum -y install curl 。
就可以访问Nginx server了。说明已经把Nginx server 80端口绑定到了Linux 本地的80端口。
我Linux虚拟机网络nat模式,做一下这一步有点多余。其实可以直接通过访问虚拟机的IP+端口(80)。就可以访问得到Nginx server。在这里也不是炫什么,自己记录一下。
在这呢我是在Windows下做了一个映射。打开cmd 以管理员身份执行。
下面简单说下上面的命令的意思
listenport本机监听的端口
listenaddress本机监听IP
connectport 虚拟机被映射的端口
connectaddress虚拟机被映射出去的IP地址
查看所有监听的映射命令:netsh interface portproxy show all
根据IP和端口移除映射规则 :netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=8888
删除所有映射规则 :netsh interface portproxy reset