链接的docker集装箱不能通过暴露的端口到达

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

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

我期待的是从containerB上有一个containerA通过80端口到达,但它只能通过9000端口到达。80端口只能从主机看到。

有没有办法使容器的containerA 9000端口可以通过80端口的所有容器链接到,而不仅仅是主机?

当您使用docker撰写文件的ports部分公开端口时,您指定了host:container映射,因此希望容器上的9000只能在主机上通过80来访问。

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

另一个select是使用大使模式,你有一个从消费者到提供者之间的“大使” 。https://docs.docker.com/articles/ambassador_pattern_linking/

那么集装箱B – >集装箱A大使 – >集装箱A

您可以将大使的80号端口暴露,然后大使可以连接到集装箱A的9000港口。

在构build更复杂的基础架构时,可以通过服务registry获得更多的创造性,因此容器通过服务registry而不是简单的容器链接相互定位。

尽pipe如此,您通常不应直接指定外部端口。 如果你这样做,并且你尝试在同一个docker主机上运行多个容器的副本,你将会遇到端口冲突。 或者,如果您正在运行另一个试图公开相同外部端口的容器,则还会遇到端口冲突。