【问题标题】:How to host two Docker containers exposing port 80 on the same server如何在同一台服务器上托管两个暴露端口 80 的 Docker 容器
【发布时间】:2015-08-05 03:19:27
【问题描述】:

我有 2 个网站需要客户端连接到端口 80。每个网站都在自己的容器中运行。我想在同一个 Docker 主机上运行这两个容器。

我了解 80 端口只能在 Host 上暴露一次。有哪些解决方案具有最小的开销/管理,可以让我简单地在同一主机上运行两个容器(同时仍然允许客户端访问端口 80 上的每个容器)?

网站 1 和网站 2 都应在端口 80 上显示给客户端的网络浏览器,并具有友好的 URL(即:www.web1.com、www.web2.com)

【问题讨论】:

  • 不确定 docker 但在 IIS 中,我们使用 Host 标头来允许端口 80 上的多个网站。

标签: docker


【解决方案1】:

使用 nginx 反向代理

  1. 在主机上安装Nginx。在 Debian/Ubuntu 上:apt-get install nginx。注意:我假设您的主机上没有 apache 或其他 Web 服务器...
  2. 对于每个站点,在目录/etc/nginx/sites-available中写入一个nginx站点文件 将该站点重定向到将在其他一些预先安排的端口(例如,2001、2002...)上运行的 docker 容器的 http。每个站点都有自己的文件,如下所示,但每个站点都有不同的预先安排的端口。外部用户将通过相同 IP 地址但具有不同网站名称的端口 80 访问这些,并且 nginx 将从这些名称中以不可见的方式处理必要的内部连接。
  3. 符号链接站点文件,以便它们显示在目录/etc/nginx/sites-enabled 中并重新启动nginx。稍后,如果您需要暂时禁用对某个站点的访问,您可以删除其中一个链接并重新启动 nginx。
  4. 通过将docker run 命令添加到/etc/rc.local 来在系统重启时启动容器,并将预先安排的主机端口(localhost:2001)重定向到容器端口 80,例如docker run -d -p localhost:2001:80 imageA

如果容器关闭,您将收到来自 nginx 的网关错误。这可以自定义为显示自定义 HTML 页面。为了更稳健,最好在 supervisord 或其他一些可以重生死进程的进程管理器中管理容器。

这是一个用于重定向到端口 2001 的示例 nginx 站点文件:

upstream dockerA { 
         server localhost:2001;
}

server {
       listen 192.168.1.8:80;  // REPLACE WITH HOST NUMERIC IP ADDRESS
       root /var/web/siteAstaticfiles;
       index index.html;
       server_name www.siteA.com;

       location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://dockerA;
        }               
}

在此示例中,虽然为站点 A 设置了 HTML 文件的本地磁盘目录,但并未使用该目录。相反,所有请求都发送到上游。我还没有测试rootindex 行是否可以安全地省略。

【讨论】:

  • 既然可以使用其他容器,为什么还要在主机上安装 Nginx?
  • 当然。我发布了我手头的东西。如果您有该解决方案,请随时发布。
【解决方案2】:

使用 docker、docker-compose 和 nginx-proxy 在单个主机上托管多个网站的更合适的方法: https://blog.florianlopes.io/host-multiple-websites-on-single-host-docker/

【讨论】:

  • 欢迎来到stackoverflow。请考虑将链接的内容放在这里以改进您的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
相关资源
最近更新 更多