1.端口映射的本质
端口映射是指通过Docker 守护进程在宿主机(Host)的网络协议栈上建立访问控制列表(ACL)和网络地址转换(NAT)规则,将发往宿主机特定 IP 地址及端口(L4 Socket)的网络流量,透明地路由、转发并伪装(Masquerade)至容器隔离网络命名空间(Network Namespace)内指定端口的通信机制。简单地说就是在宿主机(你的电脑/虚拟机)的“大门”上凿个洞,从外面访问这个洞(端口)的人,会被 Docker 悄悄领到容器那个“小黑屋”里对应的服务上。
2.三种端口映射的方法
2.1 随机分配端口
#-p 80 只指定了容器内部的端口(80),但没有指定宿主机端口。 docker run -d --name nginx-test -p 80 nginx:latest对于未指定宿主机端口,docker会从默认的临时端口范围(32768-60999)中自动分配一个未被占用的端口,映射到容器的 80 端口。
按上图来说就是宿主机的32768端口被映射到容器的80端口,在用户访问32768端口时,docker把目标地址转成容器的80端口,让容器里的nginx一直认为用户是在访问自己的80端口。
2.2指定宿主机端口
#指定将容器的80端口映射到宿主机的8080端口 docker run -d --name nginx-test -p 80:8080 nginx:latest2.3绑定宿主机指定IP
docker run -d --name nginx-demo -p 127.0.0.1:8080:80 nginx:latest