无法通过暴露端口访问链接的 Docker 容器

无法通过暴露端口访问链接的 Docker 容器

我有一个包含两个容器的 docker-compose.yml 文件:

containerA:
...
ports:
- "80:9000"

containerB:
...
links:
- containerA

我期望从 可以containerA通过端口 80 访问containerB,但只能通过端口 9000 访问。80 端口只能从主机上看到。

有没有办法让容器的containerA9000 端口可以通过 80 端口访问到它所链接的所有容器,而不仅仅是主机?

答案1

ports当您使用docker compose 文件的部分公开端口时,您正在指定一个host:container映射,因此预计容器上的 9000 只能通过主机上的 80 访问。

你可以直接将端口暴露给其他容器https://docs.docker.com/compose/yml/#expose,但不能指定外部端口号,只能指定 9000(而不是 80)。

另一种选择是使用大使模式,即有一个“大使”作为消费者和提供者之间的沟通桥梁 https://docs.docker.com/articles/ambassador_pattern_linking/

因此容器 B -> 容器 A 大使 -> 容器 A

您可以在大使上公开端口 80,然后大使可以连接到容器 A 的端口 9000。

当您构建更复杂的基础设施时,您可以在服务注册表方面发挥更多创造力,因此容器可以通过服务注册表而不是简单的容器链接来相互定位。

不过,出于良好的习惯,您通常不应直接指定外部端口。如果您这样做并尝试在同一台 docker 主机上运行容器的多个副本,则会发生端口冲突。或者,如果您正在运行另一个试图公开相同外部端口的容器,您也会遇到端口冲突。

相关内容