首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为了创建码头容器,我可以选择哪个本地主机端口?

为了创建码头容器,我可以选择哪个本地主机端口?
EN

Stack Overflow用户
提问于 2022-02-05 14:55:52
回答 3查看 568关注 0票数 0

目前我正在学习Kurbernetes和Docker,特别是KinD。首先,我只想运行docker run --rm --name <container's name> -p 8080:80 -d <image name>来从图像创建一个容器。

我知道TCP/IP协议(或Internet协议)中使用端口来处理特定的程序(软件)。端口80是运行web服务器的默认端口。

现在,我的问题是为什么是8080还是5000?在这种情况下,如何确定哪个端口应该是外部端口?这是随机的,还是有任何规则/限制?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-05 15:47:34

对于docker run -p选项(并编写ports:),对于第一个端口号,您可以选择主机系统上尚未使用的任何端口。正如您已经注意到的,端口80是标准的HTTP,在没有显式端口号的http://hostname/ URL中使用的是什么。各种框架都使用端口3000或5000、8000或8080作为缺省值,但在任何方面都不是“标准”或“特殊”。

第二个端口号必须是服务器进程正在侦听的端口号。服务器进程必须侦听特定的0.0.0.0 "all address“地址,如果这是一个可配置的选项;如果它侦听127.0.0.1 (默认情况下是许多面向开发人员的服务器),它将无法从其容器外部到达。这个数字通常包含在Dockerfile中的EXPOSE行中,但该指令没有其他效果。(没有理由包括docker run --expose选项或组合expose:块,删除它总是安全的。)

没有关于这两个端口匹配的特殊要求。如果您想使用主机端口8888,因为它是可用的,并且您的应用程序是使用默认的Express端口3000的Node应用程序,那么它将工作到

代码语言:javascript
复制
docker run -p 8888:3000 ...

如果您真的不在乎,那么您可以只使用容器端口号的docker run -p,但这是不寻常的。docker port会告诉你港口码头的选择。

代码语言:javascript
复制
docker run -p 3000 --name my-container ...
docker port my-container 3000

你在这里也提到了库伯内特斯。在Kubernetes中,Pods之间的所有通信都通过服务,实际上是集群内负载均衡器.我建议始终让服务使用“正常”端口来处理您使用的任何协议,端口80用于未加密的HTTP。每个服务都有自己的集群IP地址,因此在服务或Pods之间没有冲突的风险。如果您使用的是NodePort类型的服务,以使它可以从集群外部访问,那么通常只能使用端口30000到32767。

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata: { name: the-service-name }
spec:
  selector: { ... }
  ports:
    - port: 80           # for HTTP, regardless of how the service is implemented
      targetPort: http   # matching the Pod's `containerPorts:` name
      # nodePort: 30080  # if the Service has type: NodePort, optional

现在,通过此服务来自另一个Pod的调用可以使用http://the-service-name/作为具有默认端口的URL。

票数 1
EN

Stack Overflow用户

发布于 2022-02-05 15:12:42

端口8080通常用于承载您的个人use服务器/服务,它是端口80的备用端口,您也可以使用其他端口而不是8080。当有人试图从外部连接到您的when服务器时,如果您使用端口8080,则不需要指定端口号,因为默认情况下它将查找端口8080。

如果您使用任何其他端口号,当有人试图从外部连接到您的webservice/server时,他们应该指定您指定的自定义端口号来访问您的webservice/server。

票数 0
EN

Stack Overflow用户

发布于 2022-02-05 21:38:08

正如大卫非常清楚地解释的那样,您可以使用操作系统尚未使用的65535端口中的任何一个。然而,还有两个额外的限制:

通常,高达1023的端口无法从用户空间访问。由于docker守护进程是以根权限运行的,因此您不必在意,但最好还是在上面进行。

然后,每个操作系统都有一系列临时端口。这些端口将被操作系统用于传出TCP连接(是的,它们还需要一个端口)。此范围因操作系统而异。如果您想确保您能够在某个端口(您认为是可用的)启动容器,请确保操作系统不会基于任何其他进程需要连接的情况开始使用它。因此,最好选择短时端口范围之外的端口。

简而言之,在Linux系统上,您希望选择一个介于1024到32767之间的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70999144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档