docker - 为什么我们可以在 docker run 命令行中有更多 time -p 选项
问题描述
我已经看到一个 docker run 命令行如下:
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
此命令启动镜像 rabbitmq:3-management 使用选项 --it,它以交互模式运行,因此我们可以在容器仍在运行时执行容器内的命令。使用选项 --name,它允许我将 rabbitmq 名称分配给我的容器。
我不明白的是 -p 选项,为什么它是两次?
我知道访问该过程的唯一方法是从它内部。要允许外部连接到容器,您必须打开(发布)特定端口。
所以它的工作方式如下:docker run -p 8080:80 [image_name]
. 所以这个命令我将容器中的 TCP 端口 80 映射到 Docker 主机上的端口 8080。
所以我的问题是为什么会这样
-p 5672:5672 -p 15672:15672 rabbitmq:3-management
为什么我有两次 -p ?为什么我有相同的端口5672:5672 and 15672:15672
?
谢谢
解决方案
5672
RabbitMQ默认接受端口上的 TCP 客户端连接(消费者、发布者) 。所以-p 5672:5672
意思是“5672
将主机上的端口映射到5672
这个容器的端口”。
RabbitMQ 管理 UI 是一个 HTTP 服务器,15672
默认监听端口。所以-p 15672:15672
意味着“15672
将主机上的端口映射15672
到此容器的端口”,以便您可以在 Web 浏览器中访问管理 UI,例如localhost:15672
.
在这两种情况下,左边的数字都是主机端口号。如果5672
是您已经在主机上使用的端口,您可以将主机上的不同端口映射到容器,例如-p 95672:5672
.
推荐阅读
- c# - 每个 cefsharp 实例的不同 javascript 导航器对象
- mercurial - 新创建的存储库中的 Arc diff 引发异常“hg:解析错误:空查询”
- java - 在 Java 中处理 INR 货币的正确方法
- mysql - 我的查询不为空,即使在 mysql 数据库中为空,这里的正确语法是什么?
- laravel - Laravel如何从数据库下载txt文件
- sql - 仅选择表 A 中比表 B 中的实际日期更近的预测数据
- javascript - 部分 SPA 应用,历史导航在视口中呈现 JSON
- c++11 - 如何获取当前时间的亚秒
- oracle - 如何在 oracle apex 交互式报告中选择记录 ID
- perl - 只匹配两次