在Docker中,“expose”和“publish”这两个概念经常被提到,它们都与容器的网络端口配置相关,但具体用途和行为却有所不同。
-
Expose:
EXPOSE指令用于Dockerfile中,其主要目的是指定容器在运行时监听的端口,用于文档化。它实际上不会自动开放端口到宿主机。- 使用
EXPOSE可以为容器的使用者提供信息,说明容器意图打开哪些端口以供通信。但只是作为一种声明,并不意味着外部可以访问这些端口。
-
Publish:
- 当运行容器时,使用
-p或--publish标志来映射和开放容器的端口到宿主机的端口。这样做实际上允许从宿主机或外部网络访问这个端口。 - 例如,使用
docker run -p 80:80 nginx,这条命令将容器内的80端口映射到宿主机的80端口上,使得宿主机的80端口可以接受来自外部的请求并转发给容器。
- 当运行容器时,使用
总结来说,EXPOSE是在构建镜像时的声明,指明容器打算用哪些端口,而publish是在运行容器时实际执行的端口映射操作,使外部能够访问到容器的指定端口。