Docker端口暴露的几种方式

 更新时间:2025年12月03日 10:50:38   作者:SRE成长记  
主要介绍了Docker端口暴露的几种方式,包括-p(--publish)、-P(--publish-all)和EXPOSE,具有一定的参考价值,感兴趣的可以了解一下

知识点回顾

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端口暴露内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker 实现浏览器里开发Android应用的功能

    Docker 实现浏览器里开发Android应用的功能

    这篇文章主要介绍了Docker 实现浏览器里开发Android应用的功能的相关资料,这里对布置环境做了详细的步骤,也许你能用到这样的功能,需要的朋友可以参考下
    2016-11-11
  • 通过Dockerfile构建Docker镜像的方法步骤

    通过Dockerfile构建Docker镜像的方法步骤

    这篇文章主要介绍了通过Dockerfile构建Docker镜像的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Alpine镜像中telnet转移至busybox-extras

    Alpine镜像中telnet转移至busybox-extras

    今天小编就为大家分享一篇关于Alpine镜像中telnet转移至busybox-extras,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • docker各目录含义详细解析

    docker各目录含义详细解析

    Docker容器的目录结构通常是在构建镜像时定义的,它基于所使用的基础镜像,下面这篇文章主要给大家介绍了关于docker各目录含义详细解析的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • Docker容器跨主机通信overlay网络的解决方案

    Docker容器跨主机通信overlay网络的解决方案

    Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式,本文给大家介绍Docker容器跨主机通信overlay网络的方案,感兴趣的朋友一起看看吧
    2022-02-02
  • Docker 容器连接的具体实现

    Docker 容器连接的具体实现

    本文主要介绍了Docker 容器连接的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Docker 容器日志查看和清理的实现步骤

    Docker 容器日志查看和清理的实现步骤

    在处理Docker容器的过程中,经常需要查看容器的日志输出来排查问题或者进行系统监控,本文主要介绍了Docker容器日志查看和清理的实现步骤,感兴趣的可以了解一下
    2023-11-11
  • Docker网络如何配置dns

    Docker网络如何配置dns

    这篇文章主要介绍了Docker网络如何配置dns问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 如何使用Docker部署briefing视频聊天系统

    如何使用Docker部署briefing视频聊天系统

    briefing是一个开源的、安全的直接视频群聊平台,这篇文章主要介绍了使用Docker部署briefing视频聊天系统的详细过程,需要的朋友可以参考下
    2024-01-01
  • docker安装nacos并配置文件持久化方式

    docker安装nacos并配置文件持久化方式

    这篇文章主要介绍了docker安装nacos并配置文件持久化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06

最新评论