【问题标题】:How to expose docker containers to the internet if they share the host port?如果它们共享主机端口,如何将 docker 容器公开到互联网?
【发布时间】:2020-08-26 20:17:42
【问题描述】:

我正在使用 docker for windows。有 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 时,这两个容器中的哪个会被访问?是否存在确定性行为?

【问题讨论】:

  • 你是如何运行容器的?哪个命令
  • 命令:docker container run -d -P windows/servercore/iis:windowsservercore-ltsc2019
  • 你应该像这样使用它:docker run -p 80:80
  • 端口 80 不会到达任一容器:该输出中的 第一个 数字是主机端口,因此端口 50095 到达一个容器,而 50093 到达另一个容器。
  • David - 那么它最多允许 1 个主机端口指向 1 个容器吗?

标签: docker docker-container docker-networking


【解决方案1】:

正如大卫在 cmets 中提到的那样,您的端口映射倒退了。例如,根据您提供的信息,您将导航到 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2021-07-11
    • 2021-03-20
    • 1970-01-01
    • 2013-07-20
    • 2016-06-24
    • 2016-12-20
    相关资源
    最近更新 更多