繁体   English   中英

Docker 运行 -p?/? (这两个端口号是什么,它们代表什么)

[英]Docker run -p ?/? (what are this two port numbers and what they represents )

我使用了命令“docker run -p 8080/8080 --name my_local_image....”,但无法在本地找到图像“8080/8080:latest”

8080/8080 = 这两个端口究竟代表什么?

用这个“ -p 8080:8080 ”替换这个“ -p 8080/8080

  • 第一个端口:Docker 主机(您可以使用此端口访问您的容器)从外部访问容器。
  • 第二个:是您的应用程序使用的端口。

Example: I want to run tomcat server in a docker container, the default port of tomcat is 8080 and I want to expose my docker on port 9000 so i have to write:

docker run -p 9000:8080 --name myTomcatContainer tomcat 

因此,通过此配置,我可以使用以下命令从外部访问 Tomcat:http://host-ip:9000

-p选项用于公开用于映像实例的端口。 第一个是主机端口,“:”后的第二个fullcolon是它应该映射到的容器端口。 有关更多详细信息,请阅读doc

您在使用 docker run 启动实例时收到的错误告诉我们,您随命令提供的映像名称在您使用的机器上本地不可用,这也可能是您提供端口的方式的问题使用 '/' 而不是 ":"。所以,为了安全起见,首先使用docker pull从 repo 中提取最新图像,然后使用正确的语法运行它。

--expose=[]:暴露容器内的一个端口或一系列端口。 这些是EXPOSE指令公开的附加内容

-P:将所有暴露的端口发布到主机接口

-p=[]:发布一个容器的端口或一系列端口到主机格式:ip:hostPort:containerPort | ip::containerPort | 主机端口:容器端口 | containerPort hostPort 和 containerPort 都可以指定为一系列端口。 为两者指定范围时,范围内的容器端口数必须与范围内的主机端口数匹配,例如:-p 1234-1236:1234-1236/tcp 仅为 hostPort 指定范围时,containerPort 必须不是一个范围。 在这种情况下,容器端口在指定的 hostPort 范围内发布。 (例如, -p 1234-1236:1234/tcp )(使用 'docker port' 查看实际映射)

--link="": 添加到另一个容器的链接 (:alias or )

只是为了在这里已经很好的答案中添加一点,我喜欢使用在城市中寻找朋友公寓的类比来解释端口号。

在这个类比中,

  • 主机操作系统 == 公寓大楼所在的社区

  • 您的申请 == 公寓大楼

  • 应用程序的暴露端口 == 综合体中的特定公寓

如果您要查找某人的地址,您会找到用户的邻居(在这种情况下,它将是 URL,如果在本地开发,很可能是http://localhost

但是您需要公寓大楼的街道号码,该号码是5000 :8080 之类的第一个数字,因此您的应用程序在端口 5000 上暴露在主机操作系统上,朋友的街道地址是 5000,localHost 街道。

但是一旦你到达公寓大楼,你仍然需要知道该敲哪扇门。 您已经到达公寓大楼(您的申请),但您的朋友具体住在哪里? 那是第二个数字, 5000: 8080

因此,您朋友的网络地址是 URL、主机操作系统中的端口(如果您在本地开发,这是您的计算机,如果不是,它是应用程序运行的任何服务器)和应用程序中公开的端口的组合。

请注意,公寓大楼通常有多个公寓,但仍位于同一地址,因此您的应用程序很可能会暴露多个端口,例如5000:80815000:9000

也有可能不同建筑的两套公寓有相同的公寓号,所以我们可以有5000:80808080:8080 ,这两种情况都不会导致网络流量冲突。

这张图片是我提到的最后一个案例的一个例子

主机上的端口

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM