Docker端口暴露的几种方式
知识点回顾
Docker要映射了端口,外部才能访问到容器服务。Docker映射端口有3个指令,含义分别为:
1. -p(--publish):将容器端口直接映射到宿主机端口,这是最常用、最灵活的方式。格式为:
-p [宿主机IP:][宿主机端口]:[容器端口]
2. -P( --publish-all):将 Dockerfile 中 EXPOSE 声明的所有端口随机映射到宿主机的高位端口(通常高于 32768)。
3. EXPOSE:在 Dockerfile 中使用的指令。它只是一个元数据(声明),用于说明容器预期会监听哪些端口,不会将端口映射到宿主机。
使用场景
1. 不暴露任何端口(默认场景)
命令:
docker run -d [image]
这是最隔离的状态。容器内的端口完全封闭,只有容器自己可以访问。无论是宿主机还是外部网络,甚至是其他容器,都无法通过网络连接到这个容器服务。
网络可达:

2. 使用-P(大写)随机映射端口
前提: 要求使用的镜像的 Dockerfile 中已经用 EXPOSE 指令声明了要暴露的端口。
命令:
docker run -d -P [image]
Docker 宿主机会随机选择一个未被占用的高位端口映射到容器的目标端口。
网络可达:

以minio为例子,编写Dockerfile如下:
FROM www.myharbor.com/library/asianux-7.6.1810:v1 RUN set -ex \ && mkdir -p /data \ && mkdir -p /minio COPY minio /minio/ RUN chmod 777 /minio/minio EXPOSE 9000 9001 ##声明暴露端口 CMD ["/minio/minio","server","/data","--console-address",":9001"]
构建一个镜像并启动:
# docker build . -t www.myharbor.com/minio:v1 # docker run -d -P www.myharbor.com/minio:v1

可以看到端口已经映射 出来了,并且通过端口访问正常:

3. 使用-p(小写,手动指定映射)
这是最常用的方式,有几种不同的用法:
3.1 映射到宿主机所有接口的随机端口
命令:
docker run -d -p [容器端口] [image]
将容器的指定端口映射到宿主机所有网络接口的一个随机高位端口。效果类似-P,但只针对指定的一个端口。
例如:

3.2 映射到宿主机所有接口的特定端口
命令:
docker run -d -p [宿主机端口]:[容器端口] [image]
将容器的指定端口映射到宿主机所有网络接口(0.0.0.0)的指定端口。
例如:

3.3 映射到宿主机特定IP的特定端口
命令:
docker run -d -p [宿主机IP]:[宿主机端口]:[容器端口] [image]
将容器的某个端口映射到宿主机特定IP(例如:10.0.0.101)的指定端口。这样只有通过这个特定IP才能访问,增加了安全性。
访问方式: http://10.0.0.101:[映射端口] (通过宿主机其他IP无法访问)
例如:

3.4 指定协议映射端口
命令:
docker run -d -p [宿主机端口]:[容器端口]/[协议] [image]
默认映射协议是 TCP,如果需要其它协议例如UDP,可以这样指定。
例如:

网络可达:

4. 使用--expose(运行时暴露端口)
命令:
docker run -d --expose 80 --expose 443 nginx
这个命令的效果类似于在 Dockerfile 中使用 EXPOSE 指令。它只是在运行时为容器打开这些端口,但并没有映射到宿主机。这些端口只对在同一个自定义网络中的其他容器开放,用于容器间通信。
例如:

网络可达:

注: -p 隐含了 --expose 的功能。使用 -p 80:80 时,Docker 会自动--expose 80。
总结
总结以上几种端口映射方式如下:

到此这篇关于Docker端口暴露的几种方式的文章就介绍到这了,更多相关Docker端口暴露内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
vscode利用ssh配置docker容器并开启远程编程模式的详细步骤
这篇文章主要介绍了vscode利用ssh配置docker容器内开启远程编程模式,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-03-03
Springboot使用docker-compose实现动态配置过程
这篇文章主要介绍了Springboot使用docker-compose实现动态配置全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-03-03
Docker给容器添加新端口映射的两种方法及常用命令举例详解
Docker是一个开源的应用容器引擎,允许开发者打包和发布应用到任何流行的Linux机器上,并实现虚拟化,这篇文章主要介绍了Docker给容器添加新端口映射的两种方法及常用命令的相关资料,需要的朋友可以参考下2025-03-03
No route to host两个docker容器的服务访问不通的解决
在CentOS服务器上使用Docker容器时,当容器之间的服务调用出现“Failed to establish a new connection: [Errno 113] No route to host”错误,是因为容器的报文源地址被防火墙拦截,解决方法有两种:在防火墙上开放指定端口或关闭防火墙2025-02-02


最新评论