Dockerfile描述为EXPOSE是否需要在K8s中定义ports.containerPort

Do you need to define ports.containerPort in K8s if Dockerfile describes as EXPOSE

我有一个遗留的 Deployment.yaml 被 Helm 使用并且到目前为止运行良好。

      containers:
        ports:
          - containerPort: 3000

这部分之前写错了。因此,据我所知,它的 ports 部分未在 k8s 中激活或使用。

那么现在让我感到奇怪的是容器是如何 运行 并且一直可以在端口 3000 访问的?所以我寻找另一个描述这个端口的定义。

我在 Dockerfile

中找到了它
   EXPOSE 3000

我现在的问题是 - 您是否需要在 .yaml 配置中定义 port.containerPort,或者容器端口是否已经通过 Dockerfile 暗示为 3000 EXPOSE 语句?

感觉k8s知道这应该是containerport,因为Dockerfile描述了它

不,EXPOSE 与此无关,容器将使用的信息仅供您使用 port 3000。配置来自 containerPort

对于 k8s 参见 this

对于 expose 参见 this