gpt4 book ai didi

docker - Dockerfile EXPOSE 和 Kubernetes 服务/容器端口之间的关系?

转载 作者:行者123 更新时间:2023-12-04 12:53:07 24 4
gpt4 key购买 nike

我在 Kubernetes 中的印象是,您为应用程序公开端口的方式是首先使用 EXPOSE 在 Dockerfile 中公开它。 ,然后设置 containerPort在部署yaml文件中设置,最后设置targetPort在服务 yaml 文件中。我认为这些都必须是相同的值,例如7214 .
但是,我刚刚注意到我的应用程序 Dockerfile 中的一个公开端口不正确,为 7124 (但在其他两个文件中有正确的端口)像这样:
Dockerfile

expose 7124 #This is incorrect
部署.yaml
ports:
- containerPort: 7214
服务.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
ports:
- port: 7214
targetPort: 7214
然而,我的其他应用程序运行良好,请求被转发到端口 7214 上的应用程序。没有问题。
为什么这是有效的?我根本不需要在 Dockerfile 中公开端口吗?是否 containerPort优先还是什么? This users对类似问题的回答说暴露的端口不必匹配,但没有解释原因。

最佳答案

进程正在监听的端口只有进程的开发人员知道,因为端口绑定(bind)发生在代码中。 EXPOSEcontainerPort是与外界交流的方式。EXPOSE Dockerfile 中的指令除了充当阅读 dockerfile 的人的文档以了解容器中的进程可能正在监听的端口以及运行时的某些 UI 目的之外,不会做任何其他事情 docker ps命令。这就像 dockerfile 的作者和另一个可能正在使用您的图像或修改您的 dockerfile 的人之间的交流。
甚至 containerPort您的 deployment.yaml 中的部分对任何内容都没有影响。它还可以作为文档,让人们阅读您的 list 以了解您的 pod 中的进程可能正在监听哪些端口。另一个用途是您可以使用 name 为端口命名。字段,然后您可以在其他地方(如服务对象)按名称引用此端口。
唯一重要的是您的进程在容器中监听的实际端口,并确保在 targetPort 中使用该端口服务端口中的字段。

关于docker - Dockerfile EXPOSE 和 Kubernetes 服务/容器端口之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69587845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com