Docker 中 EXPOSE -expose -P -p 详细介绍

韦嘉颖
2023-12-01

1. EXPOSE

EXPOSE 8090

语法 :EXPOSE <端口1> [<端口2>…]

上代码是 Dockerfile 中来声明端口的命令。首先,应该明确的一点,EXPOSE 命令只是声明了容器应该打开的端口并没有实际上将它打开。也就是说,如果不用 -p 或者 -P 中指定要映射的端口,容器是不会映射端口出去,不会通过宿主机被访问到。

从而得出结论是没有办法在 Dockerfile 里面进行端口映射的。

2. –expose

和 dockerfile 中 EXPOSE 暴露端口一样,docker run --expose 命令也是达到次效果,都是将端口暴露,但这个暴露的端口不依赖宿主机。

默认情况下,无法通过这些端口访问宿主机,也就是没有与宿主机的网络建立网络映射。

3. EXPOSE –expose 作用

写在 Dockerfile 中进行声明,可以让让运维人员或者后来者知道我们开启了容器的哪些端口。

声明 EXPOSE 端口之后,使用 -P 命令进行随机映射的时候,是会对这个端口进行映射。

4. -P (大写)

将容器的端口映射到宿主机的随机端口。使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。容器内部端口会取去 dockerfile EXPOSE 暴露的端口。

5. -p (小写)

将容器的端口映射到宿主机的制定端口。通过 -p 发布端口,可以与宿主机网络建立映射,也就是可以通过宿主机的网络访问到 docker 容器。

指定宿主机端口

docker run -p 6000 imagename

随机宿主机端口

这种方式的好处是,宿主机自主分配未占用的端口,防止手动指定端口,绑定端口已经被占用的情况。

docker run -p 3000:6000 imagename
 类似资料: