Dockerfile指令EXPOSE,Docker run时候可以选择-p-P,而docker-composeexposeports如何连接[containers]在Docker的网络和托管的机器使用。本文将解释这些命令之间的区别以及如何在Dockerfiledocker-compose.yml中有效地使用它们。

Docker端口#

要查看容器上定义的端口列表,可以使用docker port命令。

docker port CONTAINER [PRIVATE_PORT[/PROTOCOL]]

它列出了所有端口映射或Docker容器的特定映射。

docker port test_container
7890/tcp -> 0.0.0.0:4321
9876/tcp -> 0.0.0.0:1234
docker port test_container 7890/tcp
0.0.0.0:4321

Dockerfile EXPOSE与publish#

暴露(EXPOSE)#

在编写Dockerfiles时,指令EXPOSE告诉Docker正在运行的容器侦听特定的网络端口。这可以作为一种端口映射文档,然后可以在发布端口时使用。

EXPOSE <port> [<port>/<protocol>...]

你也可以在docker run命令中指定它,例如:

docker run --expose=1234 my_app

EXPOSE不允许通过定义的端口与同一网络外的容器或主机进行通信。要允许这种情况发生,你需要发布(publish)端口。

Publish端口并将其映射到主机#

使用docker run命令在容器网络外部发布容器的端口并将它们映射到主机的端口时,可以使用多个标志。这些标志-p-P,他们在是否要发布一个或所有端口方面不同。

要在运行容器时实际发布端口,请使用-p标志on docker run来发布和映射一个或多个端口,或使用-P标志发布所有公开的端口并将它们映射到高阶端口。

-  Docker文档:EXPOSE

docker run -p 80:80/tcp -p 80:80/udp my_app

在上面的示例中,-p标志后面的第一个数字是主机端口,第二个数字是容器端口。

要发布你在Dockerfile中定义的所有端口EXPOSE并将它们绑定到主机,你可以使用该-P标志。

docker run -P my_app

Docker Compose EXPOSE vs Prot#

使用Docker Compose定义容器时,docker-compose.yml使用指令exposeports公开和发布容器的端口。

暴露(EXPOSE)#

就像EXPOSE在Dockerfile中一样,该指令用于公开端口而不将它们发布到主机 - 它们只能被同一网络上的链接服务访问。

expose:
 - "3000"
 - "8000"

ports#

这用于将端口发布到主机。你可以使用简短的语法,也可以提供更详细的配置。

指定ports(HOST:CONTAINER)或仅指定容器端口(选择短暂的主机端口)。

ports:
 - "3000"
 - "8000:8000/tcp"
 - "127.0.0.1:8001:8001"

长格式语法允许配置无法以简短形式表示的其他字段。

ports:
  - target: 80
    published: 8080
    protocol: tcp
    mode: host

了解更多#

更多官方文档,请查阅如下,你也可以关注本站