跳到主要内容

十五、Docker 端口映射

前面章节中,当我们从一个镜像创建一个容器时,都会看到一个 -p 参数,这个 -p 参数就是用来实现端口映射的

网络应用程序都要开放端口供其它程序使用,Docker 容器中运行的网络应用程序也一样

如果要访问一个容器中的网络服务,方法之一就是先将容器中网络应用程序的端口映射到母机的一个端口上,这样,其它应用程序通过访问母机的端口来访问容器中的服务

网络端口映射

docker run 命令创建容器时添加端口映射的方法有两种: -P ( 大写的 P ) 和 -p (小写的 p )

这两种方法的区别是:

1、 **-P:**是容器内部端口随机映射到主机的高端口;
2、 **-p:**是容器内部端口绑定到指定的主机端口;

使用 -P ( 大写的 P ) 参数

例如下面的命令使用 -P 参数随机绑定本机端口

[root@pottercoding.cn ~]# docker run -d -P jcdemo/flaskapp
f6a0e149983a29294abd76c141f44e8da59bcbaf1d283be63fca803a486f9582
[root@pottercoding.cn ~]# docker run -d -P jcdemo/flaskapp
23f628a826340f24921233a1a48d3b3d4eedd23c9a5ee05abdf8f5e21fcf9c03

然后使用 docker ps -a 命令可以看到 PORTS 栏的本地端口,具有一定的随机性

[root@pottercoding.cn ~]# docker ps -a
CONTAINER ID IMAGE PORTS
23f628a82634 jcdemo/flaskapp 0.0.0.0:32769->5000/tcp
f6a0e149983a jcdemo/flaskapp 0.0.0.0:32768->5000/tcp

使用 -p ( 小写的 p ) 参数指定端口映射

如果要指定映射到某个端口,则可以使用 -p [port]:[port] 参数