我们目前在访问的时候,主要是通过网络来访问容器提供的内容的,不管是MySQL、nginx还是什么,(Ubuntu我们是搞成交互型容器了)、redis等等,都是暴露一个端口让我们来访问。实际上这不是唯一的方式,除此之外,还有另外的一些方式,比如说有两个容器MySQL和Tomcat,Tomcat里面要访问MySQL,不一定要通过端口。但是端口在目前来说是主流的方式,但是端口暴露也有一定的讲究。
我们每次使用是我 -p 参数,第一个端口是宿主机的端口,第二个端口是容器的端口(用宿主机的端口映射到容器的那个端口,一定要映射在容器暴露的端口上,才能正常运行,宿主机的端口是80,至于容器暴露的端口要提前看好文档)。
还可以使用 -P,Docker 会在宿主机上随机选择一个未被使用的端口,并将其映射到容器里面所有已经暴露的端口上面,以 Nginx 为例在docker hub中查看随机的版本,就能看到它所暴露的端口,如下:
我们可以直接使用:
这里以本地的32768端口去映射容器的80端口,宿主随机分配端口映射到容器的所有暴露端口。