【问题标题】:Docker run -p ?/? (what are this two port numbers and what they represents )Docker 运行 -p ?/? (这两个端口号是什么,它们代表什么)
【发布时间】:2020-09-19 08:59:17
【问题描述】:

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

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

【问题讨论】:

标签: java spring-boot docker docker-container docker-image


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    示例:我想在 docker 容器中运行 tomcat 服务器,tomcat 的默认端口是 8080 我想在端口 9000 上公开我的 docker 所以我有写:

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

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

    【讨论】:

    • 无法在本地找到图像“8080:8080”...这到底是什么?我在本地确实有该图像。
    • 当您输入:“Docker images”时,您是否在列表中看到您的图像?
    • 是的,它在列表中
    • 嗯,好的,你确定你写的名字和你输入“docker images”时显示的名字一样吗?你的图片名称是什么?
    【解决方案3】:

    在这里已经很好的答案补充一点,我喜欢用在城市里找朋友公寓的类比来解释端口号。

    在这个类比中,

    • Host OS == 公寓大楼所在的社区

    • 您的申请 == 公寓大楼

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

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

    但是你需要公寓大楼的门牌号,这个数字是 5000:8080 之类的第一个数字,所以你的应用程序暴露在主机操作系统的 5000 端口上,朋友们街道地址是 5000,localHost 街道。

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

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

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

    也有可能不同楼宇的两套公寓会有相同的户型,所以我们可以有5000:8080,也可以有8080:8080,这两种情况都不会造成网络流量冲突。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      相关资源
      最近更新 更多