使用同一端口的多个 Docker 镜像副本如何正常工作?

How do multiple copies of a Docker image using the same port work normally?

提问人:Rui Nian 提问时间:11/17/2023 更新时间:11/17/2023 访问量:11

问:

我有一个 5 个容器。有关示例,请参见下文。docker-compose

services:
 backend:
  image: 'backend:latest'
  ports:
   - "5000:5000"

 service_a:
  container_name: service_a
  image: 'container_a:latest'
  expose:
   - "8089"

 service_b:
  container_name: service_b
  image: 'container_a:latest'
  expose:
   - "8089"

 service_c:
  container_name: service_c
  image: 'container_b:latest'
  expose:
   - "8090"

 service_d:
  container_name: service_d
  image: 'container_b:latest'
  expose:
   - "8090"

如您所见,并公开了相同的端口,并且还共享了相同的端口。但它们的命名方式不同。所有四个容器都有一个 Web API,我的后端调用所有四个容器进行计算。令人惊讶的是,即使有 4 个容器共享 2 个端口,应用程序仍然可以正常运行。我想知道为什么即使有端口碰撞也能工作。service_aservice_bservice_cservice_ddocker-compose

在我的应用程序中,我确实将 API 服务指定为 .即使存在港口碰撞,集装箱的命名方式是否不同,这也是为什么会起作用?<container name>:<port>

网络 docker-compose

评论

1赞 David Maze 11/17/2023
在 Docker 中,每个容器都有自己的私有内部 IP 地址,因此如果多个容器碰巧使用同一个端口,则不会发生端口冲突。Compose 几乎不执行任何操作,如果它存在于您的任何文件中,您应该将其删除。具有相同容器端口连接到同一网络的多个 docker 容器对此有一些讨论。expose:

答: 暂无答案