同福

Docker端口映射

介绍

介绍

大家都尝到了 Docker 的优点,我们的服务部署到容器 Container 里之后,下一步就是需要给用户开放服务端口了

那么如何将容器 Container 里的软件服务的端口影视到宿主机来呢?下面就跟着本文学习一下吧

端口映射

自动映射

所谓自动映射就是在启动一个容器的时候告诉容器我们需要将容器内的哪些端口映射到外面去,这样做的好处是每次重新 docker 服务,亦或者重新服务器,在容器启动的一瞬间这些端口就会自动映射出去了

带端口映射的容器启动命令

通过启动容器的 -p 参数进行自动映射实现,参数格式为:

  • 映射宿主机所有设备 - [宿主端口]:[容器端口]

  • 映射宿主机特定设备 - [IP地址]:[宿主端口]:[容器端口]

  • 映射宿主机随机端口 - [IP地址]::[容器端口]

21dc8daed4e731b7.jpg

虽然这种自动映射的方法很简单,但是有个大问题,就是端口是直接开放给任何人的,我们无法控制哪些 IP 地址可以访问我们的服务端口

手动映射(旧)

手动映射就是在 docker 服务启动之后,自己通过 iptables 命令设置一系列规则进行端口映射,这样做的好处相比自动映射来说最明显的莫过于可以自由定义规则参数,我们想把端口开放给谁就开放给谁,而且可以随时切断端口访问权限

映射容器端口到宿主机

我们通过 DOCKER 这个链建立了一个宿主的 80 端口到容器 10.16.1.66 的 80 端口的映射 

b7175e52e736007b.jpg

开放一个容器的一个端口给任何人

建立完容器端口到宿主端口的映射之后,我们就可以通过转发规则将映射到宿主的端口转发出去了

41495141ffd4618f.jpg

开放一个容器的一个端口给某个 IP 地址

如果我们只希望某个 IP 地址可以访问容器端口,可以在转发规则里面限制来源 IP 地址

f22e53763b6cc42b.jpg

手动映射(新)

新版本下我们可以通过一条规则就可以完成容器到终端的数据表转发了

开放一个容器的一个端口给任何人

我们直接设置 DOCKER 规则即可完成这个设定

6a1f006935daeda6.jpg

开放一个容器的一个端口给某个 IP 地址

我们需要在设置 DOCKER 规则时候增加来源 IP 地址的限制

746ab59d6ec59707.jpg

新旧版本差异

目前笔者还没有找到一个方法可以去判断当前版本是新版本,还是旧版本

好在无论是新版本还是旧版本,多一个 FORWARD 规则也不会影响映射目的,索性我们就统一都先设置一个 DOCKER,再设置一个 FORWARD 规则好了

总结

如果我们确定要将某个容器的服务端口开放给任何人,直接用容器的 -p 参数进行自动映射是最方便的

但是如果需要控制容器的服务端口的访问权限范围 ,只能采用手动映射的方式才能实现