为啥端口需要用冒号分隔两次?

Posted

技术标签:

【中文标题】为啥端口需要用冒号分隔两次?【英文标题】:Why do ports need to be specified twice separated by a colon?为什么端口需要用冒号分隔两次? 【发布时间】:2017-10-27 15:47:06 【问题描述】:

很多时候,我在Docker Networking in Compose 页面的这个 Docker Compose 文件中看到两次用冒号描述的端口:

version: "3"
services:

  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

networks:
  default:
    # Use a custom driver
    driver: custom-driver-1

我经常想知道为什么"8000:8000" 而不仅仅是"8000"

然后我看到了这个例子,它有两个不同的端口:

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

有人能解释一下这个端口表示是什么意思吗?

【问题讨论】:

【参考方案1】:

第一个端口是主机的端口,第二个是远程端口(即:在容器中)。该表达式将远程端口绑定到本地端口。

在示例中,您将容器的 8080 端口映射到主机的 8080 端口,但使用不同的端口是完全正常的(例如:48080:8080)

【讨论】:

【参考方案2】:

如果'host'端口和发布端口的':'被省略,例如。 'docker run -d -p 3000 myimage'。 Docker 会自动为你分配一个(高数)主机端口。您可以通过运行“docker ps”来查看它。

【讨论】:

以上是关于为啥端口需要用冒号分隔两次?的主要内容,如果未能解决你的问题,请参考以下文章

需要解析冒号分隔的字符串,如果在plsql中找到匹配的则去掉部分字符串

需要解释为啥在定义类时使用一个冒号

在 Python 中用冒号分割字符串

按钮需要单击两次才能工作 - 为啥?

归纳一下html中啥时候需要分号啥时候需要冒号啥时候中间啥都不加而是空格

为啥显示下拉列表需要在 DataGridView 中单击两次?