我有一个带有两个容器的 docker-compose.yml 文件:
containerA:
...
ports:
- "80:9000"
containerB:
...
links:
- containerA
Run Code Online (Sandbox Code Playgroud)
我所期待的是有一个containerA从可达80端口containerB,但它只能通过端口号为9000的唯一可见的80端口从主机的访问。
有没有办法让容器的containerA9000 端口可以通过 80 端口访问它所链接的所有容器,而不仅仅是主机?
当您使用portsdocker 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 主机上运行容器的多个副本,则会出现端口冲突。或者,如果您正在运行另一个尝试公开相同外部端口的容器,您也会遇到端口冲突。
| 归档时间: |
|
| 查看次数: |
4154 次 |
| 最近记录: |