该Dockerfile指令EXPOSE
,Docker run
时候可以选择-p
和-P
,而docker-composeexpose
及ports
如何连接[[containers]](https://www.docker.com/what-container)在Docker的网络和托管的机器使用。本文将解释这些命令之间的区别以及如何在Dockerfile和docker-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
标志ondocker 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使用指令expose
并ports
公开和发布容器的端口。
暴露(EXPOSE)
就像EXPOSE
在Dockerfile中一样,该指令用于公开端口而不将它们发布到主机 - 它们只能被同一网络上的链接服务访问。
expose:
- "3000"
- "8000"
ports
这用于将端口发布到主机。你可以使用简短的语法,也可以提供更详细的配置。
指定ports(HOST:CONTAINER
)或仅指定容器端口(选择短暂的主机端口)。
ports:
- "3000"
- "8000:8000/tcp"
- "127.0.0.1:8001:8001"
长格式语法允许配置无法以简短形式表示的其他字段。
target
:容器内的端口published
:公开暴露的portprotocol
:端口协议(tcp
或udp
)mode
:host
用于在每个节点上发布主机端口,或者ingress
用于负载平衡的群集模式端口。
ports:
- target: 80
published: 8080
protocol: tcp
mode: host
了解更多
更多官方文档,请查阅如下,你也可以关注本站
- Docker命令:端口
- Docker文档:Dockerfile EXPOSE
- Docker Docs:Docker撰写公开
-
Docker Docs:Docker撰写端口
学习更多
学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助您更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。
- docker目录
- 白话容器