linuxea:简单解释docker的端口和端口暴露(EXPOSE)



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

I. 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

II. 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"

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

  • target:容器内的端口
  • published:公开暴露的port
  • protocol:端口协议(tcpudp
  • modehost用于在每个节点上发布主机端口,或者ingress用于负载平衡的群集模式端口。
ports:
  - target: 80
    published: 8080
    protocol: tcp
    mode: host

了解更多

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

III. 学习更多

学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助您更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。

0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2019-02-02分类: Docker

标签: docker, docker-compose

发表评论