如果 docker 个容器共享主机端口,如何将它们公开到互联网?
How to expose docker containers to the internet if they share the host port?
我正在为 windows 使用 docker。下面列出的端口上有 2 个容器 运行 Windows IIS:
Container 1: 0.0.0.0:50095->80/tcp
Container 2: 0.0.0.0:50093->80/tcp
我的主机IP是192.168.25.110
如上图,两个容器都映射到80端口,那么当外部用户浏览到192.168.25.110:80时,会访问到2个容器中的哪个?是否存在确定性行为?
正如 David 在评论中提到的那样,您的端口映射落后了。例如,根据您提供的内容,您将导航至 http://192.168.25.110:50095/ 以到达 Container1。
这可能不是您想要的,因为您可能想要使用默认的 HTTP 端口 (80)。
您应该研究适合您情况的反向代理解决方案。反向代理将在端口 80 上侦听所有流量,然后决定(根据配置)将请求发送到哪个容器。
Traefik 是一个流行的解决方案。 Traefik 监听 80 端口,然后你可以配置它根据规则将流量路由到不同的容器。
你可以这样做:
http://192.168.25.110/container1
=> 容器 1
http://192.168.25.110/container2
=> 容器 2
或
http://container1.docker.local
=> 容器 1
http://container2.docker.local
=> 容器 2
看看Traefik的快速入门指南:https://docs.traefik.io/getting-started/quick-start/
我正在为 windows 使用 docker。下面列出的端口上有 2 个容器 运行 Windows IIS:
Container 1: 0.0.0.0:50095->80/tcp
Container 2: 0.0.0.0:50093->80/tcp
我的主机IP是192.168.25.110
如上图,两个容器都映射到80端口,那么当外部用户浏览到192.168.25.110:80时,会访问到2个容器中的哪个?是否存在确定性行为?
正如 David 在评论中提到的那样,您的端口映射落后了。例如,根据您提供的内容,您将导航至 http://192.168.25.110:50095/ 以到达 Container1。
这可能不是您想要的,因为您可能想要使用默认的 HTTP 端口 (80)。
您应该研究适合您情况的反向代理解决方案。反向代理将在端口 80 上侦听所有流量,然后决定(根据配置)将请求发送到哪个容器。
Traefik 是一个流行的解决方案。 Traefik 监听 80 端口,然后你可以配置它根据规则将流量路由到不同的容器。
你可以这样做:
http://192.168.25.110/container1
=> 容器 1http://192.168.25.110/container2
=> 容器 2
或
http://container1.docker.local
=> 容器 1http://container2.docker.local
=> 容器 2
看看Traefik的快速入门指南:https://docs.traefik.io/getting-started/quick-start/