Docker 网络--容器的接口映射

container 提供一个web服务,web服务是需要外界访问的,那么接着就有一个问题,比如说我们创建一个Nginx 服务,Nginx 本身是一个非常出名的web服务。在正常情况下我们访问会看到一个欢迎的首页。

我们先创建一个Nginx 服务的container。

Docker 网络--容器的接口映射

我们创建了一个Nginx server,这时候我们不能访问这个server。访问只能通过命令交互式访问

Docker 网络--容器的接口映射

实际上无法访问。我们需要把Nginx暴露给外部访问,Nginx server 有自己的IP地址,默认端口是80,看下IP地址,默认是连接到bridge上的,可以查看bridge

docker network inspect bridge

Docker 网络--容器的接口映射

看到Nginx server IP地址是172.17.0.4 ;

Docker 网络--容器的接口映射

这时候在外部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

Docker 网络--容器的接口映射

重新创建Nginx server , docker run --name nginx-web -d -p 80:80 nginx  ;-p 是port map 参数是这样的80:80,意思是将容器的80端口映射到这台机器本地80端口。

Docker 网络--容器的接口映射

再通过docker ps 时,多了一个0.0.0.0:80->80/tcp 

Docker 网络--容器的接口映射

之前通过curl  127.0.0.1时不能访问,现在curl  127.0.0.1,若是没有安装curl 安装一下。yum -y install curl 。

Docker 网络--容器的接口映射

就可以访问Nginx server了。说明已经把Nginx server 80端口绑定到了Linux 本地的80端口。

我Linux虚拟机网络nat模式,做一下这一步有点多余。其实可以直接通过访问虚拟机的IP+端口(80)。就可以访问得到Nginx server。在这里也不是炫什么,自己记录一下。

Docker 网络--容器的接口映射

在这呢我是在Windows下做了一个映射。打开cmd 以管理员身份执行。

Docker 网络--容器的接口映射

下面简单说下上面的命令的意思

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